TL;DR:在运行 python setup.py develop
时,有没有办法 Hook setuptool 的“开发”来安装一组开发需求?
我正在使用 setuptools 构建我的第一个 python 包。我将要求指定为:
requirements = [
'click',
'ansible',
'fabric',
'gitpython',
'pyyaml',
'jinja2',
'yapsy'
]
test_requirements = [
'pytest',
'pytest-pep8',
'pytest-cov',
]
setup(
...
install_requires=requirements,
tests_require=test_requirements,
...
)
在开发过程中,我一直在安装包(在虚拟环境中):
python setup.py develop
并通过以下方式卸载:
python setup.py develop -u
该包使用 entry_points 来安装一些命令行脚本,因此这将为我设置命令并允许我在测试命令的同时编辑包。
我还有一些用于开发的依赖项...... sphinx + 扩展和其他一些东西(使用包不需要的东西)。我现在只是在虚拟环境中手动安装它们。我没有看到任何关于如何使用 setuptools 连接它们的文档(也没有在谷歌上找到任何示例)。
也许有一种方法可以 Hook “setup.py develop”以安装一组额外的要求?另一种我没有读过的方法?
最佳答案
有关使用 setup.py
与 requirements.txt
的更多信息,我找到了 this article有帮助。
更新:2016 年 9 月
我不再使用 requirements.txt
(请参阅下面的原始答案)来安装仅开发包。普遍的看法似乎是应该使用 requirements.txt
将部署固定到特定的版本号,通常使用 pip freeze > requirements.txt
。这可确保在所有服务器上安装完全相同版本的项目依赖项以及项目依赖项的依赖项。
我改为使用 extras_require
选项来 setup
。
requirements = [
'click',
'ansible',
'fabric',
'gitpython',
'pyyaml',
'jinja2',
'yapsy'
]
setup({
install_requires=requirements,
extras_require={
'dev': [
'pytest',
'pytest-pep8',
'pytest-cov'
]
}
})
现在,要安装用于开发的软件包,请运行 pip install -e .[dev]
。这将安装所有常规必需的软件包和那些在 extras_require
的 dev
部分中列出的软件包。
生产安装仍然可以使用 python setup.py install
或 pip install .
(或使用 requirements.txt
文件)完成。
原答案
这是一种 方法,它似乎符合我遇到的关于 setup.py
与 requirements.txt< 的建议
。在 setup.py
的 install_requires
参数中指定所有生产依赖项。
requirements = [
'click',
'ansible',
'fabric',
'gitpython',
'pyyaml',
'jinja2',
'yapsy'
]
setup({
# ...
install_requires=requirements
# ...
})
然后创建一个 requirements.txt
文件,指示 pip 从 setup.py
安装您的生产依赖项以及您的测试依赖项。
-e .
pytest
pytest-pep8
pytest-cov
现在您可以使用 pip install -r requirements.txt
安装您的开发包。 -e .
行将在开发模式下从 setup.py
安装您的包及其依赖项。要在生产环境中安装,您可以使用 python setup.py install
或 pip install .
。这只会安装 setup.py
中列出的依赖项。
关于python - Setuptools "development"要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28509965/