#python-3.x #python-import
#python-3.x #python-импорт
Вопрос:
У меня есть очень обычный репозиторий исходного кода, например, следующая структура:
aProject
|-----> __init__.py
|-----> src
| |-----> __init__.py
| |-----> file1.py
| |-----> file2.py
|
|-----> test
|-----> __init__.py
|-----> test_file1.py
|-----> augmentationFile.py
Уникально для моего случая, test_file1.py использует augmentationFile.py который ссылается на каталог src и from src import *
инструкцию внутри augmentationFile.py успешно найдены модули.
Я могу запустить модуль unittest из основного каталога aProject и sys.path внутри augmentationFile.py показывает «» в качестве своего первого аргумента. Это позволяет python находить относительные каталоги src.
Однако, когда я запускаю аналогично каталог aProject, на этот раз используя python test/augmentationFile.py
, python устанавливает sys.path[0] в test folder и не может разрешить from src import *
инструкцию и жалуется.
Как мне сообщить интерпретатору python (возможно, я ошибаюсь, чтобы найти соответствующий флаг, просматривая документ python 3 в cmdline), чтобы правильно определить каталоги? Один из вариантов, который приходит мне на ум, — это изменение augmentationFile.py Оператор импорта в оператор if проверяет sys.path и решает, следует ли импортировать из «..src» или «src». Необходимость изменять исходный код подобным образом в каждой подобной ситуации пугает меня. Поэтому я спрашиваю, возможно ли и как сообщить интерпретатору разрешить относительные пути с учетом текущего рабочего каталога? Спасибо,
Комментарии:
1. Это то, что я использую, чтобы получить рабочий каталог и продолжить оставшиеся операции import os path = os.getcwd()
Ответ №1:
Когда я намеренно запустил файл как модуль, он разрешил: python -m test.augmentationFile
. Проблема заключалась в местоположении ошибки оператора src, оно находилось внутри кода, не было обычным оператором импорта.