Dal momento che nessuno ha ancora trattato questa domanda del PO:
Cosa volevo fare:
Rendi installabile un modulo Python con "pip install ..."
Ecco un esempio assolutamente minimo, che mostra i passaggi di base per preparare e caricare il pacchetto su PyPI utilizzando setuptools
e twine
.
Questo non è affatto un sostituto per leggere almeno il tutorial , c'è molto di più di quello trattato in questo esempio di base.
La creazione del pacchetto stesso è già coperta da altre risposte qui, quindi supponiamo che abbiamo coperto quel passaggio e la nostra struttura del progetto in questo modo:
.
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Per poterlo utilizzare setuptools
per il packaging, dobbiamo aggiungere un file setup.py
, questo va nella cartella principale del nostro progetto:
.
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Come minimo, specifichiamo i metadati per il nostro pacchetto, il nostro setup.py
sarebbe simile al seguente:
from setuptools import setup
setup(
name='hellostackoverflow',
version='0.0.1',
description='a pip-installable package example',
license='MIT',
packages=['hellostackoverflow'],
author='Benjamin Gerfelder',
author_email='benjamin.gerfelder@gmail.com',
keywords=['example'],
url='https://github.com/bgse/hellostackoverflow'
)
Da quando abbiamo impostato license='MIT'
, includiamo una copia nel nostro progetto come LICENCE.txt
, insieme a un file readme in reStructuredText come README.rst
:
.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
A questo punto, siamo pronti per iniziare a utilizzare il packaging setuptools
, se non lo abbiamo già installato, possiamo installarlo con pip
:
pip install setuptools
Per fare ciò e creare un source distribution
, nella cartella principale del nostro progetto chiamiamo il nostro setup.py
dalla riga di comando, specificando che vogliamo sdist
:
python setup.py sdist
Ciò creerà il nostro pacchetto di distribuzione e le informazioni sull'uovo e comporterà una struttura di cartelle come questa, con il nostro pacchetto in dist
:
.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
A questo punto, abbiamo un pacchetto che possiamo installare usando pip
, quindi dalla radice del nostro progetto (supponendo che tu abbia tutti i nomi come in questo esempio):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
Se tutto va bene, ora possiamo aprire un interprete Python, direi da qualche parte al di fuori della nostra directory di progetto per evitare qualsiasi confusione, e provare a usare il nostro nuovo brillante pacchetto:
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hellostackoverflow import hellostackoverflow
>>> hellostackoverflow.greeting()
'Hello Stack Overflow!'
Ora che abbiamo confermato l'installazione e il funzionamento del pacchetto, possiamo caricarlo su PyPI.
Poiché non vogliamo inquinare il repository live con i nostri esperimenti, creiamo un account per il repository di test e installiamo twine
per il processo di caricamento:
pip install twine
Ora siamo quasi arrivati, con il nostro account creato diciamo semplicemente twine
di caricare il nostro pacchetto, chiederà le nostre credenziali e caricherà il nostro pacchetto nel repository specificato:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Ora possiamo accedere al nostro account sul repository di test PyPI e meravigliarci del nostro pacchetto appena caricato per un po ', quindi afferrarlo usando pip
:
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
Come possiamo vedere, il processo di base non è molto complicato. Come ho detto prima, c'è molto di più di quello trattato qui, quindi vai avanti e leggi il tutorial per una spiegazione più approfondita.