Как лучше всего импортировать локальные модули?Python

Программы на Python
Ответить
Anonymous
 Как лучше всего импортировать локальные модули?

Сообщение Anonymous »

«Каковы PEP-совместимые способы импорта локального пакета даже из родительской папки с наименьшими предварительными предположениями?» — таким мог бы быть длинный заголовок. Я ищу решение, позволяющее использовать локальный пакет. Мои требования:
  • он должен быть PEP-совместим, т.е. по крайней мере наиболее распространенный PEP должен поддерживать его.
  • Независим от ОС, терминала, пользователя и среды, т.е. решение не должно зависеть от каких-либо конкретных обстоятельств.
Среди этих решений я ищу тот, который
  • самый простой для реализации реализовать
  • объем модификации гибок (не требует выполнения каждый раз, но не является постоянным и общесистемным)
  • оставляет исходный код в самой простой форме, т.е. решение не требует большого количества дополнительных строк в коде
Решения
Это способы, которые я нашел на SO и других местах. Ни один из них мне не подходит, а как было сказано 8 лет назад, у каждого решения есть свои минусы. Тем не менее, я надеюсь, что в 2021 году мы сможем найти решение, отвечающее хотя бы двум моим требованиям.
Используйте conda
SO 1
Используйте среды conda и выполните conda для включения каталога в путь поиска Python с помощью conda development
, где может быть относительным или абсолютным. Затем Conda создает файл conda.pth в папке site-packages среды, и python будет предоставлено содержимое этого файла, поэтому оно будет доступно в sys.path
Недостаток: требуется conda-build, но он не всегда присутствует.
Используйте pip
SO 2a, SO 2b, SO 3
Используйте pip для локальной установки пакета. Создайте файл setup.py, настройте его, перейдите туда, где он находится, а затем установите пакет локально в редактируемом режиме с помощью pip install -e .
Недостаток: PEP 517 не поддерживает редактируемые установки, как указано в инструментах настройки.
прямой взлом sys.path
SO 2c
Добавить пути к sys.path непосредственно в скрипте Python, например:

Код: Выделить всё

import os
import sys

sys.path.insert("path")

import mymodule
Здесь путь может быть абсолютным или относительным, причем последний может быть независимым от ОС, например. с помощью os.path.sep.
Недостаток: он несовместим с PEP, поскольку не все операторы импорта находятся в верхней части файла. autopep8 изменит ваш код в неправильном порядке, однако есть обходные пути. Можно сказать, что это хороший пример, когда PEP можно пренебречь, но мне хотелось бы верить, что импорт достаточно прост, чтобы применять PEP без исключения.
измените pythonpath
Измените путь к вашей системной среде или pythonpath, добавив в него необходимый каталог.
Недостатки: он как минимум зависит от ОС и слишком глобальный, или наоборот, его нужно выполнять каждый раз. время.
используйте относительный импорт
Из скрипта включите модуль, используя относительный импорт

Код: Выделить всё

from ..somewhere import mymodule
Это не работает, если этот модуль является основным, вы получите

Код: Выделить всё

ImportError: attempted relative import with no known parent package
более того, в PEP 8 говорится: «Относительный импорт для импорта внутри упаковки крайне не рекомендуется». Гвидо считает, что все в порядке.
Похожие вопросы
Это не дубликат общих вопросов о том, как импортировать модули за пределы верхнего уровня, поскольку на эти вопросы уже приняты ответы. ТАК 2, ТАК 3, ТАК 4, ТАК 5 ТАК 6, даже не питон

Подробнее здесь: https://stackoverflow.com/questions/675 ... al-modules
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»