2013-07-18 11 views
14

Doc python dla „Pisanie Setupscript (http://docs.python.org/2/distutils/setupscript.html) wspomina, że ​​zależności może być określona na podstawie sekcjiJak określić zależności podczas tworzenia pliku setup.py dla pakietu python

> 2.4. Relationships between Distributions and Packages

[...] These relationships can be specified using keyword arguments to the distutils.core.setup() function.

Dependencies on other Python modules and packages can be specified by supplying the requires keyword argument to setup(). The value must be a list of strings. Each string specifies a package that is required, and optionally what versions are sufficient.

To specify that any version of a module or package is required, the string should consist entirely of the module or package name. Examples include 'mymodule' and 'xml.parsers.expat'.

[...]

Biorąc pod uwagę to raczej skąpe informacje bez przykładem po prostu chcę, aby upewnić się, że robię to dobrze. również nie mogę znaleźć tego parametru w opisie API requireshttp://docs.python.org/2/distutils/apiref.html#distutils.core.setup

Tak to się robi tak, na przykład,

setup(name='MyStuff', 
     version='1.0', 
     requires='os, sys, progressbar', 
     [...] 

Mam nadzieję, że ktoś może dać mi trochę więcej wglądu! Dzięki!

EDIT:

Aby rozwiązać distutils.core, setuptools kontrowersji, można po prostu zrobić

try: 
    from setuptools import setup 
except ImportError: 
    from distutils.core import setup 

Czy to ma sens?

+1

Cały system pakowania w Python jest źle udokumentowany, głównie dlatego, że istnieje tak wiele różnych miejsc z częściowo bardzo dobrymi, ale sprzecznymi informacjami. Zawsze patrzę na istniejące projekty. Jeśli nie masz specjalnych potrzeb, potrzebujesz tylko distutils. Na przykład wąskie gardło jest dobrym przykładem dla pliku 'setup.py', który używał tylko distutils: https://github.com/kwgoodman/bottleneck/blob/master/setup.py –

+0

@ Jan-PhilipGehrcke: Jeszcze" wąskie gardło " nie określa, że ​​wymaga 'numpy' w metadanych. 'setuptools' ma obecnie znacznie lepszą dokumentację, dzięki rozwidleniu fork' distribute': http://pythonhosted.org/setuptools/ –

+0

Dobrze, nawet zaczyna się od importowania numpy od razu. –

Odpowiedz

19

Ignoruj ​​distutils. Jeśli chcesz utworzyć pakiet, który określa zależności dla narzędzia takiego jak pip, aby wyjść i znaleźć dla ciebie, musisz zamiast tego bazować na swoim setup.py off of .

setuptools Zależności są wymienione w install_requires, który pobiera listę:

setup(name='MyStuff', 
     version='1.0', 
     install_requires=['progressbar'], 
     # ... 
) 

które powinny być Rozkłady własną rękę. os i sys są modułami dołączonymi do Pythona, a nie powinny być wymienione na.

+4

Niedawno miałem dłuższą dyskusję na ten temat i przekonałem się, że w obecnej sytuacji dobrym idiomem jest 'try: from setuptools import setup; z wyjątkiem ImportError: from distutils.core import setup'. –

+0

@ Jan-PhilipGehrcke Tylko FYI, że 'setup' z' distutils.core' nie obsługuje 'install_requires'. Jeśli spróbujesz go użyć, zobaczysz następujący komunikat: */usr/lib/python3.4/distutils/dist.py: 260: UserWarning: Nieznana opcja dystrybucji: 'install_requires' *. Więc w świetle tych i innych różnic, nie sądzę, że jest to bardzo dobry idiom pod jakimkolwiek innym, najprostszym warunkiem. – Six

Powiązane problemy