Python ma mylące historię narzędzi, które mogą być używane do pakowania i opisać projekty: są to distutils
w Bibliotece standardowym distribute
, distutils2
oraz setuptools
(a może więcej). Wydaje się, że distribute
i distutils2
zostały przerwane na korzyść setuptools
, co pozostawia dwa konkurencyjne standardy.
W moim rozumieniu setuptools
oferuje 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
setuptools
do definiowania projektów i tworzenia dystrybucji źródłowych.
I wyjaśnia:
Chociaż można używać pure
distutils
w 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
)setuptools
zostanie 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, distutils
a te, które obsługują, setuptools
często mieszają się setuptools
z, distutils
np. 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 setuptools
i distutils
. Często obejmuje to różne sposoby sprawdzania zależności podatne na błędy, ponieważ distutils
nie obsługuje zależności w funkcji konfiguracji.
Dlaczego ludzie wciąż dokładają dodatkowych starań, aby je wspierać distutils
- czy to, że setuptools
nie ma ich w standardowej bibliotece, jest jedynym powodem? Jakie są zalety distutils
i czy są jakieś wady pisania plików setup.py , które obsługują tylko setuptools
.
setuptools
jest ulepszoną alternatywą dla, distutils
ale pamiętaj, że „ Zalecany instalator pip uruchamia wszystkie skrypty setup.py z setuptools
, nawet jeśli sam skrypt importuje tylkodistutils
” ( źródło )
distutils
został z powrotem scalonysetuptools
, ale istnieją starsze aplikacje, które zostały napisane do użytku,distutils
a migracja do odpowiednich standardów wiąże się z kosztami.