Установите зависимости из setup.py

Интересно, например, как и пакеты .deb, это возможно в моей setup.py, я настраиваю зависимости для моего пакета и запускаю:

$ sudo python setup.py install

Они устанавливаются автоматически. Уже исследовал интернет, но все, что я узнал, просто оставил меня в замешательстве, такие вещи, как "требует", "install_requires" и "requirements.txt"

Ответ 1

Просто создайте requirements.txt в вашей папке Lib и писать все зависимости, как это:

gunicorn
docutils>=0.3
lxml==0.5a7

Затем создайте setup.py скрипт и прочитать requirements.txt в:

import os
thelibFolder = os.path.dirname(os.path.realpath(__file__))
requirementPath = thelibFolder + '/requirements.txt'
install_requires = [] # Examples: ["gunicorn", "docutils>=0.3", "lxml==0.5a7"]
if os.path.isfile(requirementPath):
    with open(requirementPath) as f:
        install_requires = f.read().splitlines()
setup(name="yourpackage", install_requires=install_requires, [...])

Выполнение установки python setup.py install установит ваш пакет и все зависимости. Как @jwodder сказал, что это не является обязательным для создания requirements.txt файла, вы можете просто установить install_requires непосредственно в setup.py скрипт. Но написание requirements.txt файл является хорошей практикой.

В функции настройки вы также должны установить version, packages, author и т.д., Прочитайте документ для полного примера: https://docs.python.org/3.7/distutils/setupscript.html

Ваш пакет dir будет выглядеть так:

├── yourpackage
│   ├── yourpackage
│   │   ├── __init__.py
│   │   └── yourmodule.py
│   ├── requirements.txt
│   └── setup.py

Ответ 2

Другое возможное решение

try:
    # for pip >= 10
    from pip._internal.req import parse_requirements
except ImportError:
    # for pip <= 9.0.3
    from pip.req import parse_requirements

def load_requirements(fname):
    reqs = parse_requirements(fname, session="test")
    return [str(ir.req) for ir in reqs]

setup(name="yourpackage", install_requires=load_requirements("requirements.txt"))