Python “设置工具”;“发展”;要求

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 =

TL;DR:在运行
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
vs
requirements.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
vs
requirements.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
    # ...
})