Ответ 1
Для получения дополнительной информации об использовании setup.py
vs requirements.txt
, я нашел эту статью полезной.
Обновление: сентябрь 2016 года
Я больше не использую requirements.txt
(см. исходный ответ ниже) для установки только пакетов разработки. По-видимому, преобладающая мудрость заключается в том, что requirements.txt
следует использовать для привязки развертываний к определенным номерам версий, обычно используя pip freeze > requirements.txt
. Это гарантирует, что на всех ваших серверах установлены одинаковые версии зависимостей вашего проекта, а также зависимости зависимостей ваших проектов.
Вместо этого я использую параметр extras_require
для setup
.
requirements = [
'click',
'ansible',
'fabric',
'gitpython',
'pyyaml',
'jinja2',
'yapsy'
]
setup({
install_requires=requirements,
extras_require={
'dev': [
'pytest',
'pytest-pep8',
'pytest-cov'
]
}
})
Теперь, чтобы установить пакет для разработки, вы запустите pip install -e .[dev]
. Это устанавливает все необходимые пакеты и, перечисленные в разделе dev
extras_require
.
Производственные установки все еще можно выполнить с помощью python setup.py install
или pip install .
(или с файлом requirements.txt
).
Оригинальный ответ
Вот способ сделать это, что, похоже, соответствует рекомендациям, которые я использовал в отношении setup.py
vs requirements.txt
. Укажите все производственные зависимости в параметре install_requires
setup.py
.
requirements = [
'click',
'ansible',
'fabric',
'gitpython',
'pyyaml',
'jinja2',
'yapsy'
]
setup({
# ...
install_requires=requirements
# ...
})
Затем создайте файл requirements.txt
, который инструктирует pip для установки ваших производственных зависимостей от setup.py
, а также ваших зависимостей тестирования.
-e .
pytest
pytest-pep8
pytest-cov
Теперь вы можете установить пакет для разработки с помощью pip install -r requirements.txt
. Строка -e .
установит ваш пакет и его зависимости от setup.py
в режиме разработки. Для установки на производство вы можете использовать python setup.py install
или pip install .
. Это будет устанавливать только зависимости, перечисленные в setup.py
.