ModuleNotFoundError при использовании символических ссылок - PullRequest
0 голосов
/ 20 мая 2019

У меня следующая структура каталогов

parent_directory/
+-- utils.py
+-- child_directory/
|   +-- script.py
+-- results_directory/
|   +-- results1
|   +-- results2

В child_directory/ есть несколько сценариев, которые ничего не импортируют друг от друга.Однако все они импортируют данные из utils.py в parent_directory/ и используют данные из results_directory.Вместо того, чтобы копировать скрипты в родительский каталог один за другим.Я хочу просто сделать мягкую символическую ссылку на файл child_directory/script.py в parent_directory.Изнутри parent_directory я делаю ссылку, используя ln -s child_directory/script.py . или ln -s absolute/path/to/child_directory/script.py ..А затем используйте python script.py для запуска сценария.

Ниже приведен пример кода script.py:

from utils.py import results_reader

# Do work

Когда я запускаю скрипт по символической ссылке в parent_directory, я получаю следующую ошибку:

ModuleNotFoundError: No module named 'utils'

Я не совсем понимаю, что здесь происходит.os.getcwd() показывает текущий путь, который будет parent_directory/.Разве он не должен читать файл utils.py?Когда я запускаю script.py, копируя его в parent_directory/, он работает без ошибок

И когда я изменяю from utils.py import results_reader на from .utils.py import results_reader, я получаю следующую ошибку:

ModuleNotFoundError: No module named '__main__.utils'; '__main__' is not a package
...