Od marca 2020 r. Większość innych odpowiedzi na to pytanie jest kilka lat nieaktualna. Gdy natrafisz na porady dotyczące problemów z pakowaniem w Pythonie, pamiętaj, aby spojrzeć na datę publikacji i nie ufać nieaktualnym informacjom.
Python User Guide Opakowanie jest warta przeczytania. Na każdej stronie wyświetlana jest data „ostatniej aktualizacji”, dzięki czemu można sprawdzić aktualność instrukcji i jest ona dość obszerna. Fakt, że jest on hostowany w subdomenie python.org z Python Software Foundation, dodaje mu wiarygodności. Strona Podsumowania projektu jest szczególnie istotna tutaj.
Podsumowanie narzędzi:
Oto podsumowanie krajobrazu opakowań Pythona:
Obsługiwane narzędzia:
distutils
jest nadal standardowym narzędziem do pakowania w Pythonie. Jest zawarty w standardowej bibliotece (Python 2 i Python 3). Jest to przydatne w przypadku prostych dystrybucji w języku Python, ale brakuje w nim funkcji. Wprowadza distutils
pakiet Python, który można zaimportować do setup.py
skryptu.
setuptools
został opracowany w celu przezwyciężenia ograniczeń Distutils i nie jest zawarty w standardowej bibliotece. Wprowadzono narzędzie wiersza polecenia o nazwie easy_install
. Wprowadzono również setuptools
pakiet Python, który można zaimportować do setup.py
skryptu, oraz pkg_resources
pakiet Python, który można zaimportować do kodu w celu zlokalizowania plików danych zainstalowanych z dystrybucją. Jednym z jego problemów jest to, że łata distutils
pakiet Pythona w małpę . Powinien dobrze współpracować pip
. Widzi regularne wydania.
scikit-build
jest ulepszonym generatorem systemu kompilacji, który wewnętrznie wykorzystuje CMake do budowania skompilowanych rozszerzeń Pythona. Ponieważ scikit-build nie jest oparty na distutils, tak naprawdę nie ma żadnych ograniczeń. Gdy jest dostępna kompilacja ninja, scikit-build może kompilować duże projekty ponad trzy razy szybciej niż alternatywy. Powinien dobrze współpracować pip
.
distlib
to biblioteka zapewniająca funkcje używane przez narzędzia wyższego poziomu, takie jak pip
.
packaging
to także biblioteka zapewniająca funkcjonalność wykorzystywaną przez narzędzia wyższego poziomu, takie jak pip
isetuptools
Przestarzałe / porzucone narzędzia:
distribute
był widelcem setuptools
. Współdzielił tę samą przestrzeń nazw, więc jeśli miałbyś zainstalowany Distribute, import setuptools
faktycznie zaimportowałby pakiet dystrybuowany z Distribute. Dystrybucja została z powrotem połączona z Setuptools 0.7 , więc nie musisz już używać Distribute. W rzeczywistości wersja Pypi to tylko warstwa zgodności, która instaluje narzędzia Setuptools.
distutils2
Była to próba podjęcia najlepiej distutils
, setuptools
a distribute
i stać się standardowe narzędzie zawarte w standardowej biblioteki Pythona. Pomysł polegał na tym distutils2
, że byłby dystrybuowany dla starszych wersji Pythona, a distutils2
jego nazwa byłaby zmieniana packaging
na Python 3.3, który zawierałby go w standardowej bibliotece. Plany te nie poszły jednak zgodnie z planem i obecnie distutils2
są projektem opuszczonym . Najnowsza wersja została wydana w marcu 2012 r., A jej strona główna Pypi została w końcu zaktualizowana, aby odzwierciedlić jej śmierć.
Inne:
Istnieją inne narzędzia, jeśli jesteś zainteresowany, przeczytaj Streszczenia projektów w Podręczniku użytkownika Python Packaging. Nie będę ich wszystkich, aby nie powtarzać tę stronę i zachować dopasowanie odpowiedź na pytanie, co było tylko o distribute
, distutils
, setuptools
i distutils2
.
Rekomendacje:
Jeśli to wszystko jest dla Ciebie nowe i nie wiesz, od czego zacząć, zaleciłbym naukęsetuptools
wraz z pip
i virtualenv
, które działają bardzo dobrze razem.
Jeśli szukasz w virtualenv
, może być zainteresowany w tej kwestii: Jaka jest różnica między venv
, pyvenv
, pyenv
, virtualenv
, virtualenvwrapper
, etc? . (Tak, wiem, jęczę z tobą.)