Локальная коллекция пакетов Python: лучший способ импортировать их?

Мне нужно отправитьколлекция программ Python, которые используют несколькопакеты хранится в местномLibrary каталог: цель состоит в том, чтобы пользователи не устанавливали пакеты перед использованием моих программ (пакеты поставляются вLibrary каталог). Каков наилучший способ импорта пакетов, содержащихся вLibrary?

Я испробовал три метода, но ни один из них не выглядит идеальным: есть ли более простой и надежный метод? или один из этих методов лучший?

В первом методеLibrary папка просто добавляется в путь к библиотеке:

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'Library'))

import package_from_Library

Library папка помещается в начале, поэтому пакеты, поставляемые с моими программами, имеют приоритет над теми же модулями, которые установлены пользователем (таким образом, я уверен, что они имеют правильную версию для работы с моими программами). Этот метод также работает, когдаLibrary папка не в текущем каталоге, что хорошо. Однако такой подход имеет недостатки. Каждая из моих программ добавляет копию одного и того же пути кsys.path, который является пустой тратой. Кроме того, все программы должны содержать три одинаковые строки, изменяющие путь, что противоречит принципу «Не повторяйся».

Улучшение по сравнению с вышеупомянутыми проблемами состоит в попытке добавитьLibrary путь только один раз, делая это в импортированном модуле:

# In module add_Library_path:
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'Library'))

и затем использовать в каждой из моих программ:

import add_Library_path
import package_from_Library

Таким образом, благодаря механизму кэширования CPython, модульadd_Library_path запускается только один раз, аLibrary путь добавляется только один разsys.path, Однако недостатком этого подхода является то, чтоimport add_Library_path имеет невидимый побочный эффект и имеет значение порядок импорта: это делает код менее разборчивым и более хрупким. Кроме того, это заставляет мое распространение программ включатьadd_Library_path.py программа, которую пользователи не будут использовать.

питонмодули изLibrary можно также импортировать, сделав пакет (пустой__init__.py файл хранится внутри), что позволяет сделать:

from Library import module_from_Library

Тем не менее, это нарушаетпакеты вLibrary, как они могли бы сделать что-то вродеfrom xlutils.filter import …, который ломается, потому чтоxlutils не найден вsys.path, Таким образом, этот метод работает, но только при включении модулей вLibrary, а не пакеты.

Все эти методы имеют некоторый недостаток.

Есть ли лучший способ доставки программ с коллекцией пакетов (которые они используют), хранящихся в локальнойLibrary каталог? или один из методов выше (метод 1?) лучше всего?

PS: В моем случае все пакеты изLibrary являются чистыми пакетами Python, но лучше использовать более общее решение, которое работает для любой операционной системы.

PPSЦель состоит в том, чтобы пользователь мог использовать мои программы без необходимости устанавливать что-либо (кроме копирования каталога, в который я их регулярно отправляю), как в примерах выше.

PPPS: Точнее, цель состоит в том, чтобы иметь гибкость легкообновление моя коллекция программ и связанные с ними сторонние пакеты изLibrary заставляя моих пользователей делатьпростая копия каталога, содержащего мои программы иLibrary папка «скрытых» сторонних пакетов. (Я делаю частые обновления, поэтому я предпочитаю не заставлять пользователей обновлять свой дистрибутив Python).

Ответы на вопрос(2)

Ваш ответ на вопрос