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

Dog*_*her 7 python packaging distutils python-2.7

应该怎样的应用程序开发人员到位setup.pyrequirements.txt?一个应用程序甚至应该有一个setup.py?

文档似乎只覆盖写的场景模块。但是在一个应用程序中,包和模块依赖应该如何编码?同时使用 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'
)
Run Code Online (Sandbox Code Playgroud)

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

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

Sim*_*ser 4

不相关的版本号,需要手动更新。

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

“测试”导入与项目无关(“多处理”)。

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

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

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

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

Python 社区的使用情况各requirements.txt不相同。setup.py到目前为止,setup.py需要了解安装项目时的要求,但是当要部署您的应用程序时,您可以不使用文件setup.py而只使用requirements.txt文件。

没有 install_requires。

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

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

那么您可能需要将其删除。