Setuptools"开发"要求

nfa*_*rar 41 python requirements setuptools

TL; DR:有没有办法在运行时挂起setuptool的'develop'来安装一组开发需求python setup.py 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,
...
)
Run Code Online (Sandbox Code Playgroud)

在开发过程中,我一直在安装软件包(在虚拟环境中):

python setup.py develop
Run Code Online (Sandbox Code Playgroud)

并卸载:

python setup.py develop -u
Run Code Online (Sandbox Code Playgroud)

该软件包使用entry_points来安装一些命令行脚本,因此这为我设置了命令,并允许我在同时测试命令时编辑软件包.

我还有一些用于开发的依赖项... sphinx +扩展和其他一些东西(使用该包不需要的东西).我现在只是在虚拟环境中手动安装它们.我没有看到任何关于如何使用setuptools连接它们的文档(并且没有在googles上找到任何示例).

也许有办法挂钩'setup.py develop'来安装一组额外的要求?另一种方法我还没读过?

Sea*_*ean 75

有关使用setup.pyvs的更多信息requirements.txt,我发现本文很有帮助.

更新: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'
        ]
    }
})
Run Code Online (Sandbox Code Playgroud)

现在,要运行开发包来安装pip install -e .[dev].这将安装所有常规必需的软件包以及dev部分中列出的软件包extras_require.

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

原始答案

这是一种方法,似乎与我遇到的关于setup.pyvs 的建议一致requirements.txt.在install_requires参数中指定所有生产依赖项setup.py.

requirements = [
    'click',
    'ansible',
    'fabric',
    'gitpython',
    'pyyaml',
    'jinja2',
    'yapsy'
]

setup({
    # ...
    install_requires=requirements
    # ...
})
Run Code Online (Sandbox Code Playgroud)

然后创建一个requirements.txt文件,指示pip安装生产依赖项setup.py以及测试依赖项.

-e .

pytest
pytest-pep8
pytest-cov
Run Code Online (Sandbox Code Playgroud)

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

  • 但是,这可能会混淆类似Heroku的部署,因为它们使用`requirements.txt`来满足生产要求. (4认同)