Импорт разных модулей в Mac python vs. spyder - PullRequest
0 голосов
/ 04 января 2019

Я недавно задал этот вопрос об импорте произвольного количества модулей в python.Я получил два хороших ответа.Оба сработали, когда я запрограммировал его в spyder.

Сегодня я запустил скрипт из своего терминала в качестве теста, так как я планирую перенести свой код на свой сервер.Но на этот раз сценарий потерпел крах с этой трассировкой:

File "evaluation.py", line 27, in __init__
self.solvers.append( __import__(file_name[:-3]) ) #cut away .py
ImportError: No module named 'v00'

Архитектура файла выглядит следующим образом:

-evaluation.py
-evaluation
    -v00.py
    -v01.py

Код в файлеvaluation.py, вызывающий проблему, следующий:

os.chdir('evaluation')

for file_name in glob.glob("*.py"):
    self.solvers.append( __import__(file_name[:-3]) ) #cut away .py

for idx, solver in enumerate(self.solvers):
    self.dqn.append(solver.DQNSolver() )

Почему это работает в spyder, а не в терминале?Они оба используют python 3.5, и я дважды проверил, что оба находятся в папке «оценка» при выполнении вредоносной строки.

1 Ответ

0 голосов
/ 04 января 2019

Типичный способ справиться с этим - превратить папку в пакет, добавив пустой файл __init__.py, а затем импортировать из пакета с помощью import evaluation.v00 (или эквивалентного вызова функции __import__).Но вы можете столкнуться с проблемами, так как ваш основной скрипт имеет то же имя, что и пакет.Я бы предложил переименовать один или другой

-evaluationscript.py
-evaluation
    -__init__.py (empty file)
    -v00.py
    -v01.py

И тогда вам, вероятно, нужно использовать import_module вместо __import__, чтобы заполнить solvers фактическим модулем (вместо пакета).).

Я не знаком со spyder, но если там работает тот же код, то это может быть добавление папки оценки в путь поиска либо с помощью PYTHONPATH env var, либо путем изменения sys.path.

При запуске сценария путь сценария добавляется в путь поиска по умолчанию для импорта модулей, но изменение папки с помощью os.chdir не повлияет на этот путь поиска.

...