How should setup.py and requirements.txt be used by app developers?

Refresh

November 2018

Views

627 time

3

What should an app developer place in setup.py and requirements.txt? Should an app even have a setup.py?

The docs seem to only cover the scenario of writing a module. But in an app, how should package and module dependency be encoded? Using both setup.py and requirements.txt?

I've been handed a 2.7.8 project with some questionable coding, and I'm not sure if this setup.py is reasonable. I'm surprised by the amount of boilerplate coding:

#!/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'
)

I'm new to Python, but I see some potential problems:

  • An irrelevant version number which needs to be manually updated.
  • The 'test' imports aren't relevant to the project ("multiprocessing").
  • We don't run tests by executing setup.py; we execute the nosetests command.
  • install_requires depends on the contents of requirements.txt. But afaik it should be the other way around: requirements.txt needs to be generated based on the install_requires section.
  • It seems to check for a python version which the app isn't coded to support.

1 answers

3

Не имеет значения номер версии, который необходимо обновить вручную.

Номер версии в setup.pyтолько важно , если это нужно приложение / развертывание.

Импорт «тест» не имеет отношения к проекту ( «многопроцессорному»).

В этом случае вам, возможно, потребуется удалить его - это может быть устаревшим кодом.

Мы не запускать тесты, выполнив setup.py; мы выполняем команду nosetests.

Я должен посмотреть его , но некоторые основы тестирования используют setup.pyдля установки проекта в отдельной среде (например, toxдля тестирования проекта в различных интерпретаторов Python).

Это зависит от содержания requirements.txt, но AFAIK это должно быть наоборот: requirements.txt должна быть сгенерирована на основе install_requires секции в setup.py

Использование requirements.txtи setup.pyварьируется в зависимости от сообщества Python. До сих пор, setup.pyнеобходимо знать требования при установке проекта , но если ваше приложение предназначено для развертывания, вы можете обойтись без setup.pyфайла и использовать только requirements.txtфайл.

Там нет install_requires.

Это может быть проблемой, в зависимости от того , вы на самом деле использовать setup.pyдля установки зависимостей (как было сказано выше, это вполне возможно , разрабатывать и развертывать приложения без setup.pyфайла).

Кажется, для проверки версии питона, который приложение не запрограммированная для поддержки.

Вы, возможно, потребуется удалить, что потом.