【问题标题】:Setuptools "development" RequirementsSetuptools“开发”要求
【发布时间】:2015-04-15 02:33:49
【问题描述】:

TL;DR:在运行python setup.py develop 时,有没有办法挂钩 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 连接它们的文档(也没有在谷歌上找到任何示例)。

也许有一种方法可以挂钩“setup.py develop”以安装一组额外的要求?另一种我没有读过的方法?

【问题讨论】:

  • 出于开发目的,我建议使用requirements.txt 为开发环境固定包版本,然后运行pip install -r requirements.txt 来部署该环境。这就是它的用例。
  • 如果 setup.py 有一个 develop_requires 条目会非常好...

标签: python setuptools requirements


【解决方案1】:

有关使用 setup.pyrequirements.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_requiredev 部分中列出的那些。

生产安装仍然可以使用python setup.py installpip install .(或requirements.txt 文件)完成。

原答案

这是一种的方法,似乎与我遇到的关于setup.pyrequirements.txt 的建议一致。在setup.pyinstall_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 installpip install .。这只会安装setup.py 中列出的依赖项。

【讨论】:

  • 这可能会混淆类似 Heroku 的部署,因为它们使用 requirements.txt 来满足生产需求。
  • 我将我的开发需求保存在一个名为 Development 的文件中——如果这会让主机感到困惑,那么没有理由必须将其命名为 requirements.txt
猜你喜欢
  • 2013-09-11
  • 1970-01-01
  • 2011-06-05
  • 2010-10-17
  • 1970-01-01
  • 2016-05-22
  • 2010-10-02
相关资源
最近更新 更多