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 setuptoolse 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 setuptoolsper 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.pysarebbe 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.pydalla 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 twineper il processo di caricamento:
pip install twine
Ora siamo quasi arrivati, con il nostro account creato diciamo semplicemente twinedi 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.