Setuptools" development"要求

时间:2015-02-13 22:39:34

标签: python setuptools requirements

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'来安装额外的一系列要求?另一种我还没读过的方法?

1 个答案:

答案 0 :(得分:57)

有关使用setup.py vs 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]。这将安装dev的{​​{1}}部分中列出的所有常规必需软件包

仍可以使用extras_requirepython setup.py install(或使用pip install .文件)完成生产安装。

原始答案

这是一种方式,这似乎与我在requirements.txt vs setup.py方面遇到的建议一致。在requirements.txt的{​​{1}}参数中指定所有生产依赖项。

install_requires

然后创建一个setup.py文件,指示pip安装来自requirements = [ 'click', 'ansible', 'fabric', 'gitpython', 'pyyaml', 'jinja2', 'yapsy' ] setup({ # ... install_requires=requirements # ... }) 的生产依赖项以及测试依赖项。

requirements.txt

现在,您可以使用setup.py安装程序包以进行开发。 -e . pytest pytest-pep8 pytest-cov 行将在开发模式下从pip install -r requirements.txt安装您的包及其依赖项。要在生产环境中安装,您可以使用-e .setup.py。这只会安装python setup.py install中列出的依赖项。