- он должен быть совместим с PEP, т.е. как минимум наиболее распространенный PEP должен его поддерживать
- Независимость от ОС, терминала, пользователя и среды, т.е. решение не должно зависеть от каких-либо конкретных обстоятельств.
- самый простой способ реализовать
- объем модификации является гибким (не обязательно выполнять каждый раз, но не является постоянным и общесистемным)
- оставляет исходный код в самом простом виде, т.е. решение не требует большого количества лишних строк в коде
Это способы, которые я нашел на SO и других местах. Ни один из них мне не подходит, а как было сказано 8 лет назад, у каждого решения есть свои минусы. Тем не менее, я надеюсь, что в 2021 году мы сможем найти решение, отвечающее хотя бы двум моим требованиям.
Используйте conda
SO 1
Используйте среды conda и выполните conda, чтобы включить каталог в путь поиска Python с помощью conda development
, где может быть относительным или абсолютным. Затем Conda создает файл conda.pth в папке site-packages среды, и python будет предоставлено содержимое этого файла, поэтому он будет доступен в sys.path
Недостаток: требуется conda-build, но он присутствует не всегда.
Используйте pip
СО 2а, СО 2б, СО 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
Недостаток: он несовместим с PEP, поскольку не все операторы импорта находятся в верхней части файла. autopep8 изменит ваш код в неправильном порядке, однако есть обходные пути. Можно сказать, что это хороший пример того, как PEP можно пренебречь, но мне хотелось бы верить, что импорт достаточно прост, чтобы применять PEP без исключения.
изменить pythonpath
Измените путь к вашей системной среде или путь к pythonpath, добавив в него необходимый каталог.
Недостатки: он как минимум зависит от ОС и слишком глобальный, или, наоборот, нужен чтобы выполнять его каждый раз.
используйте относительный импорт
Из скрипта включите модуль, используя относительный импорт
Код: Выделить всё
from ..somewhere import mymodule
Код: Выделить всё
ImportError: attempted relative import with no known parent packageВопросы по теме
Это не дубликат общих вопросов о том, как импортировать модули за пределами верхнего уровня, потому что на эти вопросы уже есть ответы. ТАК 2, ТАК 3, ТАК 4, ТАК 5 ТАК 6, даже не питон
Подробнее здесь: https://stackoverflow.com/questions/675 ... al-modules
Мобильная версия