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

dsu*_*lly 38 python pip setuptools distribute

我有一个带有setup.py的包"A"和一个extras_requires行,如:

extras_require = {
    'ssh':  ['paramiko'],
},
Run Code Online (Sandbox Code Playgroud)

一个依赖于util的包"B":

install_requires = ['A[ssh]']
Run Code Online (Sandbox Code Playgroud)

如果我运行python setup.py installsetuptools.command.easy_install引擎盖下使用的软件包B,extras_requires则会正确解析,并安装了paramiko.

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

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

这可能与pip有关吗?

aar*_*fay 36

我们使用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,
)
Run Code Online (Sandbox Code Playgroud)

要安装包:

$ pip install -e . # only installs "required"
Run Code Online (Sandbox Code Playgroud)

发展:

$ pip install -e .[develop] # installs develop dependencies
Run Code Online (Sandbox Code Playgroud)

  • 似乎`pip install.[develop]`(没有`-e`)不起作用,如果你想安装额外的`.`,你需要使用可编辑的安装. (6认同)
  • @JeremyBanks这是[PIP问题](https://github.com/pypa/pip/issues/1236).它已在代码库中修复,因此理论上应该在最新版本中修复. (2认同)

Try*_*yPy 17

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

  • 对于后代,使用`pip install packagename [extra1,extra2] == 2.1`,如示例6 [here](https://pip.pypa.io/en/latest/reference/pip_install.html#examples)中所述[这篇文章](http://stackoverflow.com/a/26285009/1959808). (8认同)

can*_*his 16

@aaronfay 的答案是完全正确的,但最好指出,如果您使用的zsh是 install 命令,则pip install -e .[dev]需要将其替换为pip install -e ".[dev]".