TL;DR:在运行python setup.py develop
时,有没有办法挂接setuptool的'develop‘来安装一组开发需求?
我正在使用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连接它们的文档(也没有在googles上找到任何示例)。
也许有一种方法可以让'setup.py develop‘安装一组额外的需求?另一种我没读过的方法?
发布于 2015-03-04 05:57:44
有关使用setup.py
与requirements.txt
的更多信息,我发现this article很有帮助。
更新: 2016年9月
我不再使用requirements.txt
(参见下面的原始答案)来安装仅限开发的包。流行的观点似乎是,通常使用pip freeze > requirements.txt
,应该使用requirements.txt
将部署绑定到特定的版本号。这可确保在所有服务器上安装完全相同版本的项目依赖项以及项目依赖项的依赖项。
我转而使用setup
的extras_require
选项。
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
中列出的依赖项。
https://stackoverflow.com/questions/28509965
复制相似问题