Проблемы с повторным использованием разработанной библиотеки

Вопрос или проблема

Я разрабатываю библиотеку уже довольно долго. Ее структура следующая:

pgk1                # центральная библиотека
  ...               # подсистемы и модули
  requirements.txt  # соответствующие зависимости

Эта библиотека предназначена только для внутренних нужд и не может быть загружена в PyPI, также ее нельзя установить в центральный сайт-пакетов моего интерпретатора.

Так что моя идея заключалась в том, чтобы установить центральное место для таких библиотек под PYTHONPATH, чтобы я мог легко импортировать как from pkg1 import XY для каждого нового проекта, который я начинаю.

Проблема в том, что pkg1 имеет свой requirements.txt для venv, которые неизвестны / не установлены в текущем проекте (текущем venv), и во время выполнения будет вызвана ошибка ImportError.

Конечно, я мог бы скопировать requirements.txt из pkg1 в новый requirements.txt, но это было бы утомительно.

Я буду очень благодарен за любые советы, которые помогут мне переработать более простой рабочий процесс с такими зависимостями.

  1. Создайте вашу библиотеку pkg1 в виде пакета и определите все зависимости в пакете.
  2. Соберите свой пакет (вручную или с помощью чего-то наподобие пакета build), чтобы создать Wheel или Source Distribution (SDist).
  3. Создайте локальный PIP-репозиторий и включите Wheel/SDist для pkg1 в локальный репозиторий. (Это может быть так же просто, как каталог, содержащий файлы Wheel/Source Distribution, созданные из сборки, и HTML индексные файлы, которые содержат ссылки на файлы. Вы можете автоматически сгенерировать его из каталога, используя пакет piprepo, но не слишком сложно написать собственный скрипт, если вы не хотите зависеть от сторонних библиотек. Или, если хотите, вы можете настроить локальный веб-сервер для репозитория.)
  4. Когда вы хотите использовать pkg1 в другом проекте, включите его в requirements.txt/setup.py/pyproject.toml для нового проекта.
  5. Когда вы хотите установить его в виртуальной среде, если вы используете requirements.txt, используйте --extra-index-url параметр командной строки:
    python -m pip install --extra-index-url /path/to/your/local/repo -r requirements.txt
    

    Чтобы установить зависимости для нового проекта. Он попытается получить pkg1 из локального репозитория (а также попытается получить его из PyPi, что, предполагая, что нет другого пакета с тем же именем, не удастся – но это не проблема, если он находится в локальном репозитории). Если вы правильно создали пакет на шаге #1, тогда установка pkg1 также попытается установить зависимости pkg1 и, рекурсивно, их зависимости.

Ответ или решение

Проблемы с повторным использованием разработанной библиотеки: детальный анализ

При разработке библиотеки, такой как pkg1, внутренние зависимости и ошибки импорта могут стать серьезными преградами для эффективного повторного использования кода в различных проектах. В данном контексте, даже если вы создали центральное место для вашей библиотеки в переменной окружения PYTHONPATH, важно учитывать несколько факторов, чтобы избежать проблем на этапе импорта. Давайте посмотрим на ключевые вопросы, связанные с повторным использованием вашей библиотеки.

1. Отсутствие управления зависимостями

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

Решение: Лучше всего создать стандартный пакет Python, что позволит вам определить все зависимости в одном месте и избежать дублирования. Используйте инструменты, такие как setuptools, чтобы создать структуру пакета и указать все зависимости в setup.py или pyproject.toml. Это обеспечит автоматическую установку зависимостей при установке вашего пакета.

2. Копирование зависимостей

Копирование списка зависимостей из requirements.txt вашей библиотеки в каждый новый проект является утомительной и подверженной ошибкам практикой. Если библиотека изменяется, вам придется обновить каждый проект вручную.

Решение: Создание локального PIP-репозитория позволит вам хранить ваши библиотеки вместе с их зависимостями и управлять ими централизованно. Вы можете использовать такие инструменты, как piprepo для автоматизации этого процесса. Когда вашему проекту нужна библиотека, достаточно указать её в requirements.txt проекта единожды, и все зависимости будут автоматически загружены.

3. Проблемы с установкой зависимости в виртуальных окружениях

Если вы пытаетесь импортировать библиотеки из pkg1, но зависимости не установлены в текущем виртуальном окружении, вам все равно придется вручную устанавливать эти зависимости, что нарушает рабочий процесс.

Решение: Во-первых, установите вашу библиотеку из локального репозитория, используя параметр --extra-index-url. Например:

python -m pip install --extra-index-url /path/to/your/local/repo -r requirements.txt

Это вызовет установку не только вашей библиотеки, но и всех её зависимостей, что значительно упростит процесс.

4. Инициализация и управление проектами

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

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

Заключение

Повторное использование вашей библиотеки pkg1 требует систематического подхода к управлению зависимостями и средами. Автоматизация этого процесса с помощью создания пакетов, локальных PIP-репозиториев и шаблонов проектов не только упростит вашу работу, но и приведет к лучшей стабильности и предотвращению ошибок. Следуя предложенным рекомендациям, вы сможете оптимизировать рабочий процесс и сделать использование вашей библиотеки более эффективным и менее подверженным ошибкам.

Оцените материал
Добавить комментарий

Капча загружается...