2012-05-23 11 views
5

Mam program, który używa dateutil z indeksu paczki. Chciałbym, aby setup.py sprawdził jego obecność i spróbował go pobrać używając easy_install, jeśli go tam nie ma.Jak wymagać i instalować pakiet przy użyciu Pythona 3.x distutils?

The documentation for distutils wskazuje na to, że można to zrobić za pomocą słowa kluczowego requires w setup(), ale gdy próbuję, instaluje w systemie bez dateutil nie dając ostrzeżenie lub instalowania wymaganego pakietu.

Jedyne, co mogłem znaleźć w Google, to this blog post about the same issue, które również nie miało odpowiedzi.

Czy używam niewłaściwego numeru distutils? Czy muszę podklasę distutils.command.install i sam sprawdzać/instalować?

Odpowiedz

4

Automatyczne pobieranie zależnościami to funkcja wprowadzona przez setuptools który jest przez stronę trzecią dodatek do distutils, w szczególności install_requires argumentem dodaje. Aby uzyskać więcej informacji, patrz setuptools documentation.

Inną opcją jest użycie pliku requirements.txt z pip zamiast używania easy_install jako instalatora pakietów. pip jest teraz zalecanym instalatorem; Aby uzyskać więcej informacji, zobacz numer Python Packaging User Guide.

Aktualizacja [2015-01]: Poprzednia wersja tej odpowiedzi odnosiła się do widelca distribute z setuptools. Widelec distribute został ponownie włączony do nowego aktywnego projektu setuptools. distribute jest już martwy i nie powinien już być używany. setuptools i pip są teraz bardzo aktywnie utrzymane i wsparcie Python 3.

+0

wymaga argumentem distutils jest bezużyteczny i nieużywane, musisz użyć plików wymagań pip lub setuptools 'install_requires argument, dopóki PEP 345 nie zostanie powszechnie użyty (to sprawia, że ​​install_requires jest oficjalnie wspierany, z nową nazwą: requires-dist; distutils2 ją obsługuje). –

+0

UWAGA: ten komentarz stał się nieaktualny; Dystrybucja i narzędzia konfiguracji zostały połączone. Setuptools ma teraz pełną obsługę 3.x. – Kevin

+0

@Kevin, dzięki za przypomnienie; wiele się zmieniło od czasu napisania oryginalnej odpowiedzi. Zaktualizowałem odpowiedź, aby odzwierciedlić bardziej aktualny stan świata: scalenie narzędzia Distribute i setuptools, zakończenie rozwoju distutils2, błogosławieństwo 'pip' jako oficjalnego instalatora pakietów Python i nowego' Python Packaging User Przewodnik ". –

0

Argument install_requires w zależności od konfiguracji distutils pracować dla mnie dobrze, tylko wtedy, gdy tworzę sdist dystrybucyjnego, jak: python setup.py sdist

+0

'install_requires' jest ** nie ** argumentem' distutils.core.setup' jest [dodatkowy argument w dystrybucji - setuptools] (http://pythonhosted.org/distribute/setuptools.html#new-i- change-setup-keywords), więc musisz użyć dystrybuowanej wersji 'setup', jak wcześniej @Ned. Możesz również spojrzeć na [tę odpowiedź opisującą stan modułów opakowania] (http://stackoverflow.com/a/14753678/965798) w python. – marcz

Powiązane problemy