Переопределение пути 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
Другие вопросы по тегам