pip是否从基于setuptools / distribute的源处理extras_requires?

时间:2011-01-25 17:41:04

标签: python setuptools pip distribute

我的包“A”包含setup.py和extras_requires行,如:

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

依赖于util的包“B”:

install_requires = ['A[ssh]']

如果我在包B上运行python setup.py install,其中使用setuptools.command.easy_installextras_requires已正确解析,并且已安装paramiko。

但是,如果我运行pip /path/to/Bpip hxxp://.../b-version.tar.gz,则会安装软件包A,但不会安装paramiko。

因为pip“从源代码安装”,我不太清楚为什么这不起作用。它应该调用B的setup.py,然后解析&安装B和A的依赖关系。

pip可以实现吗?

3 个答案:

答案 0 :(得分:31)

我们使用setup.pypip来管理我们的软件包的开发依赖项,但您需要更新版本的pip(我们目前正在使用1.4.1)。< / p>

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

答案 1 :(得分:17)

自2012年2月发布的pip 1.1(此问题提出一年后)支持此功能。

答案 2 :(得分:2)

@aaronfay的回答是完全正确的,但可能需要指出的是,如果您使用的是zsh,则安装命令pip install -e .[dev]必须替换为pip install -e ".[dev]"