Python “设置工具”;“发展”;要求
TL;DR:在运行Python “设置工具”;“发展”;要求,python,setuptools,requirements,Python,Setuptools,Requirements,TL;DR:在运行python setup.py develope时,是否有方法钩住setuptool的“develope”来安装一组开发需求 我正在使用setuptools构建我的第一个python包。我将要求指定为: requirements = [ 'click', 'ansible', 'fabric', 'gitpython', 'pyyaml', 'jinja2', 'yapsy' ] test_requirements =
python setup.py develope
时,是否有方法钩住setuptool的“develope”来安装一组开发需求
我正在使用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 -u
软件包使用入口点来安装一些命令行脚本,因此这为我设置了命令,并允许我在测试命令的同时编辑软件包
我还有一些用于开发的依赖项。。。sphinx+扩展和其他一些东西(使用包不需要的东西)。我现在只是在虚拟环境中手动安装它们。我没有看到任何关于如何使用setuptools连接它们的文档(也没有在谷歌上找到任何示例)
也许有一种方法可以钩住“setup.py develope”来安装一组额外的需求?另一种我没有读过的方法?有关使用
setup.py
vsrequirements.txt
的更多信息,我觉得很有用
更新:2016年9月
我不再使用requirements.txt
(参见下面的原始答案)来安装仅用于开发的软件包。流行的观点似乎是,应该使用requirements.txt
将部署固定到特定的版本号,通常使用pip freeze>requirements.txt
。这可确保在所有服务器上安装项目依赖项的完全相同版本以及项目依赖项的依赖项
我改为使用extras\u 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\u require
的dev
部分中列出的软件包
生产安装仍然可以使用python setup.py安装
或pip安装。
(或使用requirements.txt
文件)
原始答案
下面是一种方法,它似乎符合我遇到的关于setup.py
vsrequirements.txt
的建议。在setup.py
的install\u 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安装
或pip安装。
。这将只安装setup.py
中列出的依赖项,出于开发目的,我建议使用requirements.txt
为开发环境锁定软件包版本,然后运行pip install-r requirements.txt
部署该环境。这就是它的用途。如果setup.py有一个development\u requires
条目,那就太好了……不过,这可能会混淆Heroku式的部署,当他们使用requirements.txt
来满足生产需求时,我将我的开发需求保存在一个名为development
的文件中——如果这会混淆主机,那么它没有理由被称为requirements.txt
。
requirements = [
'click',
'ansible',
'fabric',
'gitpython',
'pyyaml',
'jinja2',
'yapsy'
]
setup({
# ...
install_requires=requirements
# ...
})