Как мы можем включить все зависимости подмодуля при упаковке в python?

В основном у меня есть проект ниже:

my_pkg
 __init__.py
 \module1
    __init__.py
    scrip1.py
    script2.py
    requirement.txt
 \module2
    _script1.py
    _script2.py
    requirement.txt
 setup.py
 LICENSE
 README.md

Я пытаюсь включить файлы require.txt в упаковку моей библиотеки my_pkg

Требование.txt в папке module1 содержит: request

требование.txt в папке module2 содержит: pdfkit

Это мой файл setup.py:

import setuptools
from setuptools import setup

with open("README.md", "r") as fh:
    long_description = fh.read()

setup(
    name="im_pkg",
    version="0.0.1",
    author="John Doe",
    description="Shared Python library",
    long_description=long_description,
    license="MIT",
    long_description_content_type="text/markdown",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    install_requires=["requests","pdfkit"],
    python_requires='>=3.6'
)

Я хотел бы динамически читать файл require.txt моей подпапки без необходимости помещать его вручную в раздел install_requires=


person FazBen    schedule 02.07.2020    source источник
comment
Ответ — выбросить файлы requirements.txt. Для библиотеки они бесполезны. Поле install_requires в вашем setup.py является источником правды для зависимостей проекта, и вы уже это рассмотрели.   -  person Arne    schedule 04.07.2020
comment
Справедливости ради следует отметить, что существуют инструменты упаковки, которые могут объединять requirements.txt и, по сути, создавать для вас setup.py или setup.cfg, чаще всего pbr. Но обычно они ожидают только одного файла требований, и, как я уже сказал выше, они немного ошибаются в своем подходе. См. также этот пост от одного из основных авторов Python. пакет инструментов для получения дополнительной информации.   -  person Arne    schedule 05.07.2020


Ответы (1)


Вы должны перечислять только основные зависимости вместе с их версиями, чтобы не сломаться. Не перечисляйте то, что было использовано для разработки, например yapf, black, pytest, flake8 и т. д. Сведите требования к минимуму.

Однако, если вы этого не хотите, это ответ, который вы ищете.

Пример:

    install_requires=[
        "graphene==2.1.8",
        "graphene-django==2.5.0",
        "graphql-core==2.2.1",
        "psycopg2==2.8.3"
    ],
person frozenOne    schedule 02.07.2020