我的包装“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有关吗?
这是自2012年2月发布的pip 1.1(此问题提出一年后)支持的。
我们使用setup.py
和pip
来管理我们包的开发依赖关系,尽管你需要更新版本的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
来自@aaronfay的答案是完全正确的,但可能很高兴指出,如果你使用zsh
,安装命令pip install -e .[dev]
需要被pip install -e ".[dev]"
取代。