应用程序开发人员应该如何使用setup.py和requirements.txt?

时间:2014-12-14 23:24:42

标签: python python-2.7 packaging distutils

应用开发者应该在setup.pyrequirements.txt中放置什么? app 是否应该有setup.py

docs似乎只涵盖了编写模块的场景。但在应用程序中,应该如何编码包和模块依赖?同时使用setup.py和requirements.txt?

我已经处理了一个带有一些可疑编码的2.7.8项目,我不确定这个setup.py是否合理。我对样板编码的数量感到惊讶:

#!/usr/bin/env python
from setuptools import setup, find_packages
import sys

if sys.argv[1] == 'test':
    import multiprocessing, logging
    from billiard import util

with open('requirements.txt') as f:
    required = f.read().splitlines()

if sys.version_info < (2, 7, 0):
    required.append('importlib')

setup(
    version='0.1',
    name='...',
    description='...',
    author='...',
    author_email='...',
    packages=find_packages(),
    package_data={},
    install_requires=required,
    include_package_data=True,
    tests_require=[
        'billiard',
        'nose==1.3'
    ],
    test_suite='nose.collector'
)

我是Python的新手,但我发现了一些潜在的问题:

  • 需要手动更新的无关版本号。
  • &#39;测试&#39;进口与项目无关(&#34;多处理&#34;)。
  • 我们不会通过执行setup.py来运行测试;我们执行nosetests命令。
  • install_requires取决于requirements.txt的内容。但是afaik应该是相反的:requirements.txt需要根据install_requires部分生成。
  • 似乎检查了应用程序未编码支持的python版本。

1 个答案:

答案 0 :(得分:3)

  

需要手动更新的无关版本号。

setup.py中的版本号仅在您的应用程序/部署需要时才重要。

  

&#39;测试&#39;进口与项目无关(&#34;多处理&#34;)。

在这种情况下,您可能需要删除它 - 它可能是过时的代码。

  

我们不会通过执行setup.py来运行测试;我们执行nosetests命令。

我必须查找它,但是一些测试框架使用setup.py在单独的环境中安装项目(例如tox,用于在各种Python解释器中测试项目)。 / p>

  

这取决于requirements.txt的内容,但是afaik应该是相反的:需要根据setup.py中的install_requires部分生成requirements.txt

requirements.txtsetup.py在Python社区中的使用各不相同。到目前为止,setup.py需要知道安装项目时的要求,但是当您的应用程序要部署时,您可以不使用setup.py文件而只使用requirements.txt文件。 / p>

  

没有install_requires。

这可能是个问题,具体取决于您是否实际使用setup.py来安装依赖项(如上所述,完全有可能开发和部署没有setup.py文件的应用程序)。

  

似乎检查了应用程序未编码支持的python版本。

您可能需要删除它。