Вот моя структура каталогов:импорт из родительского каталога в скрипте, который находится в подкаталоге
my_package
|
+--__init__.py
|
+--setup.py
|
+--module.py
|
+--sub_package
|
+--__init__.py
|
+--script.py
Сценарий script.py
необходимо импортировать функции из module.py
, и мне нужно, чтобы иметь возможность запускать script.py
с помощью интерпретатора Python ,
Я знаю, что Гвидо называет это «анти-шаблон». И я знаю, что у вас есть 10 причин, почему я не должен этого делать. Я, вероятно, согласен с большинством из них - действительно, я знаю. Я бы не стал задавать этот вопрос, могу ли я избежать этого. Так что мы можем просто пропустить часть, в которой мы переходим, почему это плохо и перейти к решению? Благодаря!
Я также знаю, что есть около 1000 других вопросов, связанных с этим. Я, наверное, сейчас их прочитал. Большинство из них были устарели из-за изменений в системе импорта Python, а остальные просто не правы.
То, что я пробовал:
- Использование
from .module import my_function
вscript.py
, а затем либо работаетpython script.py
внутри каталогаsub_package
илиpython sub_package/script.py
внутри каталогаmy_package
. В любом случае, я получаю ошибку:
SystemError: Parent module '' not loaded, cannot perform relative import
- Использование
from module import my_function
илиfrom my_package.module import my_function
и работаетscript.py
, как описано выше (или изsub_package
илиmy_package
). Я получаю:
ImportError: No module named 'module'
(или аналогично с my_package
вместо module
)
- Запуск
python -m sub_package/script
из каталогаmy_package
илиpython -m my_package/sub_package/script
из родительского каталогаmy_package
. Я получаю:
No module named sub_package/script
(или аналогично с my_package/sub_package/script
)
Есть ли что-нибудь еще я должен попробовать? Я бы действительно скорее избегать возиться с sys.path
или PYTHONPATH
по целому ряду причин.
Вы можете написать свою функцию __init__.py или родительскому модулю, а затем попытаться импортировать my_function –
Вы читали [_Релегирующий импорт за миллиардный раз_] (http://stackoverflow.com/questions/14132789/relative-imports- для-миллиардное время)? – martineau
@martineau Да: это был один из вопросов, который привел к моей третьей попытке ('python -m ...'). Единственное другое полезное предложение, которое я видел в этом, заключалось в том, что он возился с 'sys.path', который вообще опасен (и в конкретном случае, который мотивирует этот вопрос). –