2011-01-25 28 views
24

Tôi có gói "A" với một setup.py và một dòng extras_requires như:Liệu pip có xử lý extras_requires từ các thiết lập/phân phối nguồn gốc không?

extras_require = { 
    'ssh': ['paramiko'], 
}, 

Và một gói "B" mà phụ thuộc vào util:

install_requires = ['A[ssh]'] 

Nếu tôi chạy python setup.py install trên bao bì B, sử dụng setuptools.command.easy_install dưới mui xe, các extras_requires được giải quyết một cách chính xác, và paramiko được cài đặt.

Tuy nhiên, nếu tôi chạy pip /path/to/B hoặc pip hxxp://.../b-version.tar.gz, gói A được cài đặt, nhưng paramiko thì không.

Vì pip "cài đặt từ nguồn", tôi không hoàn toàn chắc chắn tại sao tính năng này không hoạt động. Nó sẽ được gọi setup.py của B, sau đó giải quyết & cài đặt phụ thuộc của cả B và A.

Điều này có thể thực hiện với pip không?

+1

Cập nhật pip của bạn 'pips cài đặt -U pip' và sau đó 'pips cài đặt" [ kiểm tra] "' nên cài đặt có tên là 'extra_require' phần –

Trả lời

12

Điều này được bổ sung từ pip 1.1, được phát hành vào tháng 2 năm 2012 (một năm sau khi câu hỏi này được hỏi).

+0

Điều đó dường như là nó. Grep của tôi trên cây nguồn pip đã không bật lên, như tôi đã tìm kiếm chuỗi "extras_require", không chỉ là "extras". – dsully

+5

Đối với hậu thế, sử dụng 'pip install packagename [extra1, extra2] == 2.1' như được mô tả trong ví dụ 6 [ở đây] (https://pip.pypa.io/en/latest/reference/pip_install.html#examples) và trong [bài đăng này] (http://stackoverflow.com/a/26285009/1959808). –

19

Chúng tôi sử dụng setup.pypip để quản lý phụ thuộc phát triển cho gói của chúng tôi, mặc dù bạn cần phiên bản mới hơn của pip (chúng tôi đang sử dụng 1.4.1 hiện tại).

#!/usr/bin/env python 
from setuptools import setup 
from myproject import __version__ 

required = [ 
    'gevent', 
    'flask', 
    ... 
] 

extras = { 
    'develop': [ 
     'Fabric', 
     'nose', 
    ] 
} 

setup(
    name="my-project", 
    version=__version__, 
    description="My awsome project.", 
    packages=[ 
     "my_project" 
    ], 
    include_package_data=True, 
    zip_safe=False, 
    scripts=[ 
     'runmyproject', 
    ], 
    install_requires=required, 
    extras_require=extras, 
) 

Để cài đặt gói:

$ pip install -e . # only installs "required" 

Phát triển:.

$ pip install -e .[develop] # installs develop dependencies 
+6

Có vẻ như 'pip install. [Develop]' (không có '-e') không hoạt động, và bạn cần sử dụng cài đặt có thể chỉnh sửa nếu bạn muốn cài đặt phần bổ sung' .'. –

+0

Khi sử dụng 'pip install -e. [Develop]', pip có cài đặt gevent và Fabric không? Và hành vi này được ghi lại ở đâu? – laike9m

+0

Lệnh đó sẽ cài đặt mọi thứ, 'gevent',' flask', 'Fabric' và' nose'. Pip sử dụng 'setuptools' để xây dựng hệ thống của họ https://pip.pypa.io/en/latest/reference/pip/?highlight=setuptools#build-system-interface. 'extras_require' là một tùy chọn trong' setuptools' để cài đặt 'extras' https://pythonhosted.org/setuptools/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies – aaronfay

Các vấn đề liên quan