2011-01-25 33 views
24

我有包 「A」 與一個setup.py和extras_requires一行:pip是否會處理來自setuptools/distribute基礎資源的extras_requires?

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

這取決於UTIL包 「B」:

install_requires = ['A[ssh]'] 

如果我的包運行python setup.py install B,它使用引擎蓋下的setuptools.command.easy_installextras_requires被正確解析,並且安裝了paramiko。

但是,如果我運行pip /path/to/Bpip hxxp://.../b-version.tar.gz,安裝軟件包A,但paramiko不是。

因爲點「從源安裝」,我不太清楚爲什麼這不起作用。它應該是調用B的setup.py,然後解決安裝B和A的依賴項的&。

這是可能與pip?

+1

更新您的PIP畫中畫`-U安裝和pip`然後`PIP安裝」 [測試]「`應該安裝名爲`extra_require`部分 – 2015-12-20 01:57:09

回答

12

這是從2012年2月發佈的pip 1.1(在提出此問題後的一年)開始支持的。

+0

似乎是這樣。我在pip源代碼樹上的grep沒有打開它,因爲我正在查找字符串「extras_require」,而不僅僅是「額外」。 – dsully 2011-01-26 16:24:18

+5

對於後代,請按照示例6 [此處](https://pip.pypa.io/en/latest/reference/pip_install.html#examples)中的描述使用`pip install packagename [extra1,extra2] == 2.1`和在[本文]中(http://stackoverflow.com/a/26285009/1959808)。 – 2015-01-22 05:47:16

19

我們使用setup.pypip來管理我們軟件包的開發依賴關係,儘管您需要更新版本的pip(我們目前使用的是1.4.1)。

#!/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, 
) 

要安裝該軟件包:

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

要開發:

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