Python ma mylące historię narzędzi, które mogą być używane do pakowania i opisać projekty: są to distutilsw Bibliotece standardowym distribute, distutils2oraz setuptools(a może więcej). Wydaje się, że distributei distutils2zostały przerwane na korzyść setuptools, co pozostawia dwa konkurencyjne standardy.
W moim rozumieniu setuptoolsoferuje znacznie więcej opcji (np. Deklarowanie zależności, testów itp.) Niż distutils, jakkolwiek nie jest to zawarte w standardowej bibliotece Pythona (jeszcze?).
User Python Opakowanie przewodnik [ 1 ] zaleca się:
Służy
setuptoolsdo definiowania projektów i tworzenia dystrybucji źródłowych.
I wyjaśnia:
Chociaż można używać pure
distutilsw wielu projektach, nie obsługuje on definiowania zależności w innych projektach i brakuje kilku wygodnych narzędzi do automatycznego wypełniania metadanych pakietów, które są dostarczane przezsetuptools. Będąc poza standardową biblioteką, setuptools oferuje także bardziej spójny zestaw funkcji w różnych wersjach Pythona i (w przeciwieństwiedistutils)setuptoolszostanie zaktualizowany, aby tworzyć nadchodzące standardowe formaty „Metadata 2.0” we wszystkich obsługiwanych wersjach.Nawet w przypadku projektów, które zdecydują się użyć
distutils, gdy pip instaluje takie projekty bezpośrednio ze źródła (zamiast instalować z wstępnie utworzonego pliku koła), w rzeczywistości utworzy projekt przy użyciusetuptools.
Jednak przyjrzenie się plikom setup.py różnych projektów ujawnia, że nie wydaje się to być rzeczywistym standardem. Wiele pakietów nadal używa, distutilsa te, które obsługują, setuptoolsczęsto mieszają się setuptoolsz, distutilsnp. Wykonując import awaryjny:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Następnie próbowano znaleźć sposób na napisanie konfiguracji, która może być zainstalowana zarówno przez, jak setuptoolsi distutils. Często obejmuje to różne sposoby sprawdzania zależności podatne na błędy, ponieważ distutilsnie obsługuje zależności w funkcji konfiguracji.
Dlaczego ludzie wciąż dokładają dodatkowych starań, aby je wspierać distutils- czy to, że setuptoolsnie ma ich w standardowej bibliotece, jest jedynym powodem? Jakie są zalety distutilsi czy są jakieś wady pisania plików setup.py , które obsługują tylko setuptools.
setuptoolsjest ulepszoną alternatywą dla, distutilsale pamiętaj, że „ Zalecany instalator pip uruchamia wszystkie skrypty setup.py z setuptools, nawet jeśli sam skrypt importuje tylkodistutils ” ( źródło )
distutilszostał z powrotem scalonysetuptools, ale istnieją starsze aplikacje, które zostały napisane do użytku,distutilsa migracja do odpowiednich standardów wiąże się z kosztami.