Python Language
Creazione di pacchetti Python
Ricerca…
Osservazioni
Il progetto di esempio pypa contiene un modello setup.py
completo e facilmente modificabile che dimostra una vasta gamma di funzionalità che gli strumenti di configurazione hanno da offrire.
introduzione
Ogni pacchetto richiede un file setup.py
che descrive il pacchetto.
Considera la seguente struttura di directory per un pacchetto semplice:
+-- package_name
| |
| +-- __init__.py
|
+-- setup.py
__init__.py
contiene solo la riga def foo(): return 100
.
Il seguente setup.py
definirà il pacchetto:
from setuptools import setup
setup(
name='package_name', # package name
version='0.1', # version
description='Package Description', # short description
url='http://example.com', # package URL
install_requires=[], # list of packages this package depends
# on.
packages=['package_name'], # List of module names that installing
# this package will provide.
)
virtualenv è ottimo per testare le installazioni dei pacchetti senza modificare gli altri ambienti Python:
$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
$ python setup.py install
running install
...
Installed .../package_name-0.1-....egg
...
$ python
>>> import package_name
>>> package_name.foo()
100
Caricamento su PyPI
Una volta che setup.py
è completamente funzionante (vedi Introduzione ), è molto semplice caricare il pacchetto su PyPI .
Imposta un file .pypirc
Questo file memorizza login e password per autenticare i tuoi account. In genere è memorizzato nella tua directory home.
# .pypirc file
[distutils]
index-servers =
pypi
pypitest
[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password
[pypitest]
repository=https://testpypi.python.org/pypi
username=your_username
password=your_password
È più sicuro usare lo twine
per caricare i pacchetti, quindi assicurati che sia installato.
$ pip install twine
Registrati e carica su testpypi (opzionale)
Nota : PyPI non consente la sovrascrittura dei pacchetti caricati , quindi è prudente testare prima la distribuzione su un server di test dedicato, ad esempio testpypi. Questa opzione sarà discussa. Prendi in considerazione uno schema di controllo delle versioni per il tuo pacchetto prima del caricamento, come la versione del calendario o il controllo delle versioni semantiche .
Accedi o crea un nuovo account su testpypi . La registrazione è richiesta solo la prima volta, anche se la registrazione più di una volta non è dannosa.
$ python setup.py register -r pypitest
Mentre si trova nella directory principale del pacchetto:
$ twine upload dist/* -r pypitest
Il tuo pacchetto dovrebbe ora essere accessibile tramite il tuo account.
analisi
Crea un ambiente virtuale di prova. Prova a pip install
il pacchetto da testpypi o PyPI.
# Using virtualenv
$ mkdir testenv
$ cd testenv
$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
# Test from testpypi
(.virtualenv) pip install --verbose --extra-index-url https://testpypi.python.org/pypi package_name
...
# Or test from PyPI
(.virtualenv) $ pip install package_name
...
(.virtualenv) $ python
Python 3.5.1 (default, Jan 27 2016, 19:16:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import package_name
>>> package_name.foo()
100
In caso di successo, il pacchetto è meno impor- tante. Potresti considerare di testare la tua API anche prima del tuo caricamento finale su PyPI. Se il pacchetto non è riuscito durante il test, non preoccuparti. Puoi ancora aggiustarlo, ricaricarlo su testpypi e provare di nuovo.
Registrati e carica su PyPI
Assicurarsi che sia stato installato il twine
:
$ pip install twine
Accedere o creare un nuovo account su PyPI .
$ python setup.py register -r pypi
$ twine upload dist/*
Questo è tutto! Il tuo pacco è ora in diretta .
Se scopri un bug, carica semplicemente una nuova versione del tuo pacchetto.
Documentazione
Non dimenticare di includere almeno una sorta di documentazione per il tuo pacchetto. PyPi prende come lingua di formattazione predefinita reStructuredText .
Leggimi
Se il tuo pacchetto non ha una grande documentazione, includi cosa può aiutare gli altri utenti nel file README.rst
. Quando il file è pronto, è necessario un altro per dire a PyPi di mostrarlo.
Crea il file setup.cfg
e inserisci queste due righe:
[metadata]
description-file = README.rst
Nota che se provi a mettere il file Markdown nel tuo pacchetto, PyPi lo leggerà come un puro file di testo senza alcuna formattazione.
Licenze
Spesso è più che benvenuto inserire un file LICENSE.txt
nel pacchetto con una delle licenze OpenSource per dire agli utenti se possono usare il tuo pacchetto, ad esempio in progetti commerciali o se il tuo codice è utilizzabile con la loro licenza.
In modo più leggibile, alcune licenze sono spiegate in TL; DR .
Rendere eseguibile il pacchetto
Se il tuo pacchetto non è solo una libreria, ma ha un pezzo di codice che può essere usato come vetrina o come applicazione standalone quando il tuo pacchetto è installato, metti quel pezzo di codice nel file __main__.py
.
Mettere il __main__.py
nella package_name
cartella. In questo modo sarai in grado di eseguirlo direttamente dalla console:
python -m package_name
Se non è disponibile __main__.py
file __main__.py
, il pacchetto non verrà eseguito con questo comando e questo errore verrà stampato:
python: nessun modulo chiamato
package_name.__main__;
'package_name' è un pacchetto e non può essere eseguito direttamente.