У меня есть следующее:
ModuleFolder
|
|-->. ModuleFile.py .
|
'-->. TestsFolder .
|
'---> UnitTest1.py
Я пытаюсь импортировать из родительского каталога. В этом случае я пытаюсь запустить "UnitTest1.py" из тестовой папки и импортировать из каталога непосредственно над ним (файл "ModuleFile.py" ).
- Я знаю, что на это уже много ответов. SO Question1, SO Question2, Каждый другой вопрос SO. Я просто не мог найти "использование../" как относительный импорт, а не явный путь.
- Я знаю, что с Python 2.5 они поддерживали "относительный импорт" в соответствии с документацией, в которой упоминается использование
from .. import *
, но я специально пытаюсь сделатьimport MyModuleName
, поэтому я могу быть более явным в unittest и избегать mangling/collisions of names.
То, что я делаю (и это работает для меня), следующее:
sys.path.append("../")
И затем импортируйте то, что мне нужно из родительского каталога.
- Да, в родительском каталоге есть __init__.py,
- Нет, мой родительский путь не является частью пути Python или переменной среды
- Почему бы мне просто не добавить родительский путь к
sys.path
? Потому что это относительный. Если я бегу из /home/workspace/MyModule/unittests/, а мой модуль находится в/home/workspace/MyModule/Я предположил, что добавление/home/workspace/MyModule/в путь не обязательно будет истинным, если сотрудник выполнит это на его машине под своим собственным каталогом /home/documents/MyModule.
Мой вопрос:
Правильно ли это Python? Если нет, то что с этим не так. Есть ли способ лучше? Или это действительно RTFM-момент, когда ответ находится в одном из вопросов 7+ SO, на которые я уже смотрел? (Я видел тех, кто рекомендовал явный путь, а не подход относительного пути, который я взял).
Другая полезная информация:
- Python 2.6
- Работа в Linux, но так же легко перепрыгнуть на Win.