我的包“A”包含setup.py和extras_requires行,如:
extras_require = {
'ssh': ['paramiko'],
},
依赖于util的包“B”:
install_requires = ['A[ssh]']
如果我在包B上运行python setup.py install
,其中使用setuptools.command.easy_install
,extras_requires
已正确解析,并且已安装paramiko。
但是,如果我运行pip /path/to/B
或pip hxxp://.../b-version.tar.gz
,则会安装软件包A,但不会安装paramiko。
因为pip“从源代码安装”,我不太清楚为什么这不起作用。它应该调用B的setup.py,然后解析&安装B和A的依赖关系。
pip可以实现吗?
答案 0 :(得分:31)
我们使用setup.py
和pip
来管理我们的软件包的开发依赖项,但您需要更新版本的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]"
。