Python Language
Tworzenie pakietów Python
Szukaj…
Uwagi
Przykładowy projekt pypa zawiera kompletny, łatwo modyfikowalny szablon setup.py
który pokazuje szeroki zakres możliwości, jakie oferuje narzędzie do konfiguracji.
Wprowadzenie
Każdy pakiet wymaga pliku setup.py
, który opisuje pakiet.
Rozważ następującą strukturę katalogów dla prostego pakietu:
+-- package_name
| |
| +-- __init__.py
|
+-- setup.py
__init__.py
zawiera tylko wiersz def foo(): return 100
.
Poniższy setup.py
zdefiniuje pakiet:
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 jest świetny do testowania instalacji pakietów bez modyfikowania innych środowisk 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
Przesyłanie do PyPI
Gdy setup.py
będzie w pełni funkcjonalny (patrz Wprowadzenie ), bardzo łatwo można przesłać pakiet do PyPI .
Skonfiguruj plik .pypirc
Ten plik przechowuje loginy i hasła do uwierzytelnienia kont. Zazwyczaj jest przechowywany w twoim katalogu domowym.
# .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
Bezpieczniej jest używać twine
do przesyłania pakietów, więc upewnij się, że jest zainstalowany.
$ pip install twine
Zarejestruj się i prześlij do testpypi (opcjonalnie)
Uwaga : PyPI nie zezwala na zastępowanie przesłanych pakietów , więc rozważne jest najpierw przetestowanie wdrożenia na dedykowanym serwerze testowym, np. Testpypi. Ta opcja zostanie omówiona. Rozważ schemat wersjonowania pakietu przed przesłaniem, taki jak wersja kalendarza lub wersja semantyczna .
Zaloguj się lub utwórz nowe konto w testpypi . Rejestracja jest wymagana tylko za pierwszym razem, chociaż rejestracja więcej niż raz nie jest szkodliwa.
$ python setup.py register -r pypitest
Znajdując się w katalogu głównym pakietu:
$ twine upload dist/* -r pypitest
Twoja paczka powinna być teraz dostępna za pośrednictwem twojego konta.
Testowanie
Utwórz testowe środowisko wirtualne. Spróbuj pip install
pakiet z testpypi lub 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
Jeśli się powiedzie, twój pakiet można najmniej importować. Możesz również rozważyć przetestowanie interfejsu API przed ostatecznym przesłaniem do PyPI. Jeśli pakiet nie powiódł się podczas testowania, nie martw się. Nadal możesz to naprawić, przesłać ponownie do testpypi i przetestować ponownie.
Zarejestruj się i prześlij do PyPI
Upewnij się, że twine
jest zainstalowany:
$ pip install twine
Zaloguj się lub utwórz nowe konto w PyPI .
$ python setup.py register -r pypi
$ twine upload dist/*
Otóż to! Twój pakiet jest już dostępny .
Jeśli zauważysz błąd, po prostu prześlij nową wersję pakietu.
Dokumentacja
Nie zapomnij dołączyć przynajmniej jakiejś dokumentacji do swojego pakietu. PyPi przyjmuje jako domyślny język formatowania reStructuredText .
Readme
Jeśli twój pakiet nie ma dużej dokumentacji, README.rst
to, co może pomóc innym użytkownikom w pliku README.rst
. Gdy plik jest gotowy, potrzebny jest inny, aby poinformować PyPi, aby go pokazał.
Utwórz plik setup.cfg
i umieść w nim dwa wiersze:
[metadata]
description-file = README.rst
Pamiętaj, że jeśli spróbujesz umieścić plik Markdown w swoim pakiecie, PyPi odczyta go jako czysty plik tekstowy bez żadnego formatowania.
Koncesjonowanie
Często bardziej niż mile widziane jest umieszczenie pliku LICENSE.txt
w pakiecie z jedną z licencji OpenSource, aby poinformować użytkowników, czy mogą korzystać z twojego pakietu na przykład w projektach komercyjnych lub czy twój kod jest użyteczny z ich licencją.
W bardziej czytelny sposób niektóre licencje są wyjaśnione na TL; DR .
Wykonanie pakietu
Jeśli Twój pakiet nie jest tylko biblioteką, ale zawiera fragment kodu, który może być używany jako prezentacja lub samodzielna aplikacja po zainstalowaniu pakietu, umieść ten fragment kodu w pliku __main__.py
.
Umieść plik __main__.py
w folderze package_name
. W ten sposób będziesz mógł uruchomić go bezpośrednio z konsoli:
python -m package_name
Jeśli nie ma dostępnego pliku __main__.py
, pakiet nie uruchomi się z tym poleceniem, a błąd zostanie wydrukowany:
python: Brak modułu o nazwie
package_name.__main__;
„nazwa_pakietu” to pakiet i nie można go bezpośrednio wykonać.