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:
distutilsjest 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 distutilspakiet Python, który można zaimportować do setup.pyskryptu.
setuptoolszostał 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ż setuptoolspakiet Python, który można zaimportować do setup.pyskryptu, oraz pkg_resourcespakiet 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 distutilspakiet Pythona w małpę . Powinien dobrze współpracować pip. Widzi regularne wydania.
scikit-buildjest 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.
distlibto biblioteka zapewniająca funkcje używane przez narzędzia wyższego poziomu, takie jak pip.
packagingto także biblioteka zapewniająca funkcjonalność wykorzystywaną przez narzędzia wyższego poziomu, takie jak pipisetuptools
Przestarzałe / porzucone narzędzia:
distributebył widelcem setuptools. Współdzielił tę samą przestrzeń nazw, więc jeśli miałbyś zainstalowany Distribute, import setuptoolsfaktycznie 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.
distutils2Była to próba podjęcia najlepiej distutils, setuptoolsa distributei stać się standardowe narzędzie zawarte w standardowej biblioteki Pythona. Pomysł polegał na tym distutils2, że byłby dystrybuowany dla starszych wersji Pythona, a distutils2jego nazwa byłaby zmieniana packagingna Python 3.3, który zawierałby go w standardowej bibliotece. Plany te nie poszły jednak zgodnie z planem i obecnie distutils2są 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, setuptoolsi distutils2.
Rekomendacje:
Jeśli to wszystko jest dla Ciebie nowe i nie wiesz, od czego zacząć, zaleciłbym naukęsetuptools wraz z pipi 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ą.)