2013-07-18 64 views
14

Các python doc cho "Viết Setupscript (http://docs.python.org/2/distutils/setupscript.html) đề cập đến mà phụ thuộc có thể được nêu ở phầnLàm thế nào để xác định phụ thuộc khi tạo tập tin setup.py cho một gói 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'.

[...]

Với thông tin này khá thưa thớt mà không một ví dụ tôi chỉ muốn chắc chắn rằng tôi làm điều đó đúng. Ngoài ra, tôi không thể tìm thấy requires tham số này trong các mô tả API http://docs.python.org/2/distutils/apiref.html#distutils.core.setup

Vì vậy, nó được thực hiện như thế này, ví dụ:

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

Tôi hy vọng một số người có thể giúp tôi hiểu rõ hơn một chút! Cảm ơn!

EDIT:

Để giải quyết những distutils.core, setuptools tranh cãi, một trong những cách đơn giản có thể làm

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

Liệu nó có ý nghĩa?

+1

Toàn bộ hệ thống đóng gói Python bị ghi nhận sai, chủ yếu là do có quá nhiều địa điểm khác nhau với thông tin một phần rất tốt nhưng mâu thuẫn. Tôi luôn nhìn vào các dự án hiện có. Trong trường hợp bạn không có nhu cầu đặc biệt, bạn chỉ cần méo. Ví dụ: nút cổ chai là một ví dụ điển hình cho tệp 'setup.py' chỉ sử dụng các dấu hiệu: https://github.com/kwgoodman/bottleneck/blob/master/setup.py –

+0

@ Jan-PhilipGehrcke: Tuy nhiên," nút cổ chai " không chỉ định rằng nó yêu cầu 'numpy' trong siêu dữ liệu. 'setuptools' có tài liệu tốt hơn nhiều trong những ngày này, nhờ vào phân phối' fork' được kết hợp lại: http://pythonhosted.org/setuptools/ –

+0

Ngay cả bạn, nó thậm chí còn bắt đầu với việc nhập dữ liệu ngay lập tức. –

Trả lời

19

Bỏ qua distutils. Nếu bạn muốn tạo một gói chỉ định các phụ thuộc cho một công cụ như pip để đi ra ngoài và tìm bạn, bạn cần phải căn cứ vào số setup.py của mình để tắt số setuptools thay thế.

setuptools phụ thuộc được liệt kê trong install_requires, trong đó có một danh sách:

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

mà nên phân phối của riêng mình. ossys là các mô-đun đi kèm với Python và không được liệt kê.

+4

Gần đây tôi đã có một cuộc thảo luận dài hơn về điều này và đã thuyết phục rằng trong tình huống hiện tại, một thành ngữ tốt là 'try: từ setuptools import setup; ngoại trừ ImportError: từ thiết lập nhập distutils.core'. –

+0

@ Jan-PhilipGehrcke Chỉ cần một FYI rằng 'setup' từ' distutils.core' không hỗ trợ 'install_requires'. Vì vậy, nếu bạn cố gắng sử dụng nó, bạn sẽ thấy một thông báo như sau: */usr/lib/python3.4/distutils/dist.py: 260: UserWarning: Tùy chọn phân phối không xác định: 'install_requires' *. Vì vậy, trong ánh sáng của sự khác biệt này và khác, tôi không nghĩ rằng đó là một thành ngữ rất tốt dưới bất cứ điều gì nhưng hoàn cảnh đơn giản nhất. – Six