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

问题描述 投票:35回答:3

我的包装“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有关吗?

python setuptools pip distribute
3个回答
17
投票

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


34
投票

我们使用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

1
投票

来自@aaronfay的答案是完全正确的,但可能很高兴指出,如果你使用zsh,安装命令pip install -e .[dev]需要被pip install -e ".[dev]"取代。

© www.soinside.com 2019 - 2024. All rights reserved.