requirements.txt против setup.py

Я начал работать с Python. Я'ве добавил requirements.txt и setup.py в моем проекте. Но, я до сих пор путают о цели обоих файлов. Я читал, чтоsetup.py предназначен для распространяемого вещи и что requirements.txt предназначен для нераспространяемого вещи. Но я не уверен, что это точный.

Как эти два файла действительно предназначается, чтобы использоваться?

Комментарии к вопросу (3)
Решение

requirements.txt

Это поможет вам настроить среду разработки. Программы, как типун может использоваться, чтобы установить все пакеты, перечисленные в файле одним махом. После этого вы можете приступить к разработке вашего скрипта Python. Особенно полезно, если вы планируете иметь другие способствуют развитию и использованию виртуальных сред. Это как вы его используете:

pip install -r < requirements.txt

setup.py

Это позволяет создавать пакеты, которые можно распространять. Этот скрипт предназначен для того чтобы установить ваш пакет на конечного потребителя's система, не для того чтобы подготовить среду разработки как установить-Р Пип < requirements.txt` делает. Смотрите этот ответ для получения более подробной информации о setup.py.

В зависимости от вашего проекта перечислены в обоих файлах.

Комментарии (5)

Короткий ответ заключается в том, что requirements.txt для перечисления всего необходимого пакета. setup.pyс другой стороны, это больше похоже на сценарий установки. Если вы Don&#39;т план по установке кода на Python, как правило, вам нужно будет толькоrequirements.txt`.

Файл setup.py описывает, в дополнение к пакету зависимостей, набор файлов и модулей, которые должны быть упакованы (или компилировать, в случае собственных модулей (т. е. написанные на C)), и метаданные, чтобы добавить к Python-пакет listings (например, название пакета, версия пакета, описание пакета, автор, ...).

Потому как список файлов зависимостей, это может привести к немного дублирования. Читайте ниже для деталей.

requirements.txt


В этом файле перечислены требования пакет python. Это обычный текстовый файл (при необходимости с комментариями), в котором перечислены пакета dependencies вашего проекта на Python (по одному в строке). Он does not описать способ, которым установлен пакет python-это. Вы, как правило, потребляют файл требования с установить-Р типун requirements.txt`.

Имя текстового файла является произвольным, но часто requirements.txt по Конвенции. При изучении репозиториев исходного кода других пакетов Python, вы могли наткнуться на другие имена, такие как dev-dependencies.txt или dependencies-dev.txt. Те служат той же цели `dependencies.txt но в целом список дополнительных зависимостей, представляющих интерес для разработчиков конкретного пакета, а именно для тестирования исходного кода (например, pytest, pylint и т. д.) перед выпуском. Пользователи пакета вообще не'т нужен весь набор зависимостей производителя для запуска пакета.

Если присутствуют несколько вариантовrequirements-X.txt, то, как правило, один список сборочных зависимостей, а другой строить-время, или зависимости тест. Некоторые проекты также каскад подать свои требования, т. е. когда одни требования файл включает другой файл (пример). Это может уменьшить повторения.

setup.py


Это скрипт на Python, который использует модуль setuptools, чтобы определить пакет python (название, файлов в комплекте, пакет метаданных, и установка). Это будет, как requirements.txt также в список зависимостей во время выполнения пакета. Setuptools является де-факто способ сборки и установки пакетов Python, но он имеет свои недостатки, которые со временем проросли разработка новых и"мета-пакет менеджеров" и, как Пип. Пример недостатков setuptools являются невозможность установки нескольких версий одного пакета, а отсутствие команды удалить.

Когда пользователь делает Python пункт Установить ./pkgdir_my_module "(или " Пип установить мой модуль), функция pip будет работать setup.py в данной директории (или модуль). Аналогичным образом, любой модуль, который имеетsetup.pyможет бытьтипун-установлен, например с помощью командыустановить Пип`. из той же папки.

Мне действительно нужны оба?


Короткий ответ-нет, но это'ы хорошо иметь обе. Они достигают разных целей, но обе они могут быть использованы в список зависимостей.

Есть одна хитрость, вы можете рассмотреть, чтобы избежать дублирования списка зависимостей между requirements.txt и setup.py`. Если вы написали полностью работать setup.py за ваш пакет уже, и зависимостей, в основном внешние, вы могли бы рассмотреть простой requirements.txt с только следующие:

 # requirements.txt
 #
 # installs dependencies from ./setup.py, and the package itself,
 # in editable mode
 -e .

 # (the -e above is optional). you could also just install the package
 # normally with just the line below (after uncommenting)
 # .

В специальный типун вариант установки, который устанавливает данный пакет в режиме _editable_. Когда Пип -Р requirements.txt идет на этот файл, типун будет установить зависимости через список в./setup.py`. Редактируемый параметр будет создать символическую ссылку в директории установки (вместо яйца или архивная копия). Это позволяет разработчикам изменять код в репозиторий без переустановки.

Вы также можете воспользоваться тем, что'ы название "кроме как&quot setuptools; когда у вас есть оба файла в свой репозиторий. Вы можете определить дополнительные пакеты в setup.py под пользовательскую категорию, и установить те пакеты, от всего, что категория с Pip:

``питон

setup.py

из setuptools импортировать настройки настройка( название=на"фу"и ... extras_require = { 'Дэв': ['pylint'], 'построение': ['запросы'] } ... ) ``

а затем в требования к файлам: ``

установить пакеты в [сборка] категория, от setup.py

(путь/к/mypkg-каталог, где setup.py есть)

-э путь/к/mypkg[сборка] ``

Это позволит сохранить все ваши списки зависимостей внутри setup.py.

Note: вы обычно выполняет pip и setup.py из песочницы, такими как те, которые создаются с программой виртуальное окружение. Это позволит избежать установки пакетов Python вне контекста вашего проекта'среда развития.

Комментарии (1)

Для полноты картины, вот как я вижу это в 3-х различных углов.

  1. Их использования в дизайне различных

Это точное описание цитируется по Официальный documentation (выделено мной):

В то время как install_requires (в setup.py) определяются зависимостями для одного проекта, файлов требования часто используется для определения требований для полной среде Python.

В то время как требования install_requires минимальны, требования файлы часто содержат исчерпывающий перечень закрепленных версий с целью обеспечения повторяемости установки полной среды.

Но может все-таки не легко быть поняты, поэтому в следующем разделе, там 2 фактические примеры, чтобы продемонстрировать, как 2 подходы должны быть использованы, по-разному.

  1. Поэтому их фактического использования (должны быть) разные
  • Если ваш проект с foo будет выпущен в виде отдельной библиотеки (значение, другие, вероятно, сделать импорт файла Foo`), тогда вы (и ваши последующие потребители) хотели бы иметь гибкий декларации зависимостей, так что ваша библиотека не будет (и не должен) быть "разборчивый" и о том, что нужный вариант из зависимостей должна быть. Так, как правило, setup.py будет содержать следующие строки:

install_requires=[ 'а>=1,&л;2', 'б>=2' ]

  • Если вы просто хотите как-то на "Документ" или "штырь" и ваше точное текущее окружение для приложения бар, что означает, вы или ваши пользователи хотели бы использовать приложение бар как есть, т. е. работает на Python bar.py вы можете заморозить свою среду так, что он будет всегда вести себя так же. В таком случае, ваш файл требования будут выглядеть так:

А==1.2.3 Б==2.3.4

Это может даже содержать некоторые зависимости не strickly требует ваша библиотека

pylint==3.4.5

  1. В реальности, какой я должен использовать?
  • Если вы разрабатываете приложение, бар, который будет использоваться в Python bar.py даже если это "просто скрипт для удовольствия" Ну, вы все еще рекомендуется использовать requirements.txt потому что, кто знает, на следующей неделе (которая, кстати, будет Рождество) вы получаете новый компьютер в подарок, так что вы должны настроить Ваш точный среду там снова.

  • Если вы разрабатываете библиотеки фу, которая будет использовать импорт Фу, Вы должны подготовить setup.py. Период. Но вы все еще можете выбрать, чтобы также обеспечить requirements.txt в то же время, которые могут:

(а) либо в=А=1.2.3 стиле (как описано в #2 выше);

(B) или просто содержать волшебный сингл .

.

что бы примерно равны, чтобы "установить требования, в зависимости от установки.РУ" в то время как без дублирования. Лично я считаю этот последний подход вроде стирает грань, добавляет путаницы и не добавляют ценность, но это все-таки трюк, полученных от подхода, упомянутых в Python упаковки сопровождающий Дональд в своем блоге](https://caremad.io/posts/2013/07/setup-vs-requirement/).

Комментарии (6)