我们建立了一个依赖于其他库的库。但是有必要(例如对于服务器批处理)和可选的依赖(例如对于具有GUI的客户端)。
这样的事情是可能的:
pip install mylib.tar.gz # automatically downloads and installs with the minimal set of dependencies
pip install mylib.tar.gz --install-option="complete" # automatically installs with all dependencies
我找到了extra_require
标记,但如何告诉pip
使用它们? setup.py
看起来像这样:
from setuptools import setup
# ...
# Hard library depencencies:
requires = [
"numpy>=1.4.1",
"scipy>=0.7.2",
"traits>=3.4.0"
]
# Soft library dependencies:
recommended = {
"mpl": ["matplotlib>=0.99.3"],
"bn": ["bottleneck>=0.6"]
}
# ...
# Installer parameters:
setup(
name = "mylib",
#...
install_requires = requires,
extras_require = recommended
)
答案 0 :(得分:22)
您可以在extras_require
中安装软件包,方法是将方括号中的推荐依赖项名称(例如[mpl]
或[bn]
)附加到pip中的软件包名称。 / p>
所以要安装带有附加要求的'mylib',你可以这样调用pip:
pip install 'mylib[mpl]'
pip install 'mylib[bn]'
这将首先下载并安装额外的依赖项,然后是mylib
的核心依赖项。
这与使用setuptools声明这些依赖关系的方式有关:http://pythonhosted.org/setuptools/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies(请参阅第三个示例中的install_requires
值)
答案 1 :(得分:10)
所以pip实际上非常挑剔安装具有额外要求的库
pip install -e ".[extra,requirements]" # works with file paths
pip install "package[extra,requirements]" # works when downloading packages
pip install ".[extra,requirments]" # DOES NOT WORK
我认为这取决于RequirementsSpec解析器的工作方式,而pip使用-e
标志做了一些额外的魔术。无论如何,经过多次敲击,这是一个有点丑陋的解决方法
pip install "file:///path/to/your/python_code#egg=SomeName[extra,requirements]"
egg=SomeName
部分基本上被忽略了,但是pip正确地获得了额外的要求
file:///
语法在pip中没有记录,因此我不确定它是否会在将来发生变化。它看起来有点像VCS Support语法,但我对它的工作有点惊讶。