Короткий ответ: requirements.txt
предназначен только для перечисления требований к пакету. setup.py
с другой стороны, больше похож на сценарий установки. Если вы не планируете устанавливать код Python, обычно вам понадобится только requirements.txt
.
Файл setup.py
описывает, помимо зависимостей пакетов, набор файлов и модулей, которые должны быть упакованы (или скомпилированы, в случае собственных модулей (т. Е. Написанных на C)), и метаданные для добавления в списки пакетов python. (например, название пакета, версия пакета, описание пакета, автор, ...).
Поскольку в обоих файлах перечислены зависимости, это может привести к небольшому дублированию. Подробности читайте ниже.
requirements.txt
В этом файле перечислены требования к пакету Python. Это простой текстовый файл (необязательно с комментариями), в котором перечислены зависимости пакета вашего проекта python (по одному в каждой строке). Он не описывает способ установки вашего пакета python. Обычно вы используете файл требований с pip install -r 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, но у него есть свои недостатки, которые со временем привели к разработке новых «менеджеров метапакетов», таких как pip. Примеры недостатков средств установки - невозможность установить несколько версий одного и того же пакета и отсутствие команды удаления.
Когда пользователь python выполняет pip install ./pkgdir_my_module
(или pip install my-module
), pip запускает setup.py
в данном каталоге (или модуле). Точно так же любой модуль с setup.py
может быть pip
установлен, например запустив pip install .
из той же папки.
Мне действительно нужны оба?
Короткий ответ: нет, но приятно иметь и то, и другое. Они достигают разных целей, но оба могут использоваться для составления списка ваших зависимостей.
Вы можете воспользоваться одной уловкой, чтобы избежать дублирования списка зависимостей между 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)
# .
-e
- это специальный pip install
параметр, который устанавливает данный пакет в редактируемом режиме. Когда pip -r requirements.txt
запущен для этого файла, pip установит ваши зависимости через список в ./setup.py
. Редактируемый вариант поместит символическую ссылку в ваш установочный каталог (вместо яйца или заархивированной копии). Это позволяет разработчикам редактировать код на месте из репозитория без переустановки.
Вы также можете воспользоваться так называемыми «дополнительными функциями setuptools», когда у вас есть оба файла в репозитории пакетов. Вы можете определить дополнительные пакеты в setup.py в настраиваемой категории и установить эти пакеты только из этой категории с помощью pip:
# setup.py
from setuptools import setup
setup(
name="FOO"
...
extras_require = {
'dev': ['pylint'],
'build': ['requests']
}
...
)
а затем в файле требований:
# install packages in the [build] category, from setup.py
# (path/to/mypkg is the directory where setup.py is)
-e path/to/mypkg[build]
Это сохранит все ваши списки зависимостей внутри setup.py.
Примечание. Обычно pip и setup.py выполняются из песочницы, например, созданной с помощью программы virtualenv
. Это позволит избежать установки пакетов Python вне контекста среды разработки вашего проекта.
person
init_js
schedule
06.04.2018
setup.py
илиrequirements.txt
) по сравнению с простым.sh
сценарием, когда я conda / pip установил каждый пакет? - person Charlie Parker   schedule 23.04.2021