Переопределение пути Python
У меня есть структура каталогов, как это:
PYTHONPATHDIR
App1
someModule.py
utils.py
utils
hasClassIWantToImport.py
И я хочу, чтобы someModule импортировал что-то из utils.hasClassIWantToImport. Когда я звоню:
from utils.hasClassIWantToImport import ClassIWant
он не может разрешить "hasClassIWantToImport", потому что думает, что я говорю о utils.py в текущем каталоге.
Как мне обойти это? Я знаю, что могу переименовать одну из утилит, но не хотел бы...
2 ответа
Вы никак не сможете сохранить доступ к обоим PYTHONPATHDIR/utils
а также PYTHONPATHDIR/App1/utils.py
одновременно, не обращаясь к одному из них относительно чего-то другого.
Если вы измените свой путь так, чтобы PYTHONPATHDIR
находится в начале списка, то вы можете импортировать utils.hasClassIWantToImport
но вы потеряете доступ к utils.py
,
Самое лучшее, что вы можете сделать, это сделать App1
пакет, разместив __init__.py
запустите файл, как подсказывает @Gryphius (т.е. /path/to/utils
во главе sys.path
). Когда вы хотите получить доступ к utils.hasClassIWantToImport
, вы
from utils.hasClassIWantToImport import ClassIWant
Чтобы импортировать файлы относительно utils.py
Будешь тогда
from App1.utils import ClassIWantFromApp1
Тем не менее, это ужасный хак, чтобы избежать переименования utils.py
, Я рекомендую избавить себя от долговременной головной боли при манипулировании путями и просто переименовать этот файл.
Не уверен, правильно ли я понял настройки вашего каталога, но вы можете попробовать:
import sys
sys.path.insert(0,'/path/to/utils')
from hasClassIwantToImport import ClassIWant