Mac python 与 spyder 中的不同模块导入
Different module import in Mac python vs. spyder
我最近问过这个 关于在 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
evaluation.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,我在执行恶意行时仔细检查了两者都在文件夹 "evaluation" 中。
处理此问题的典型方法是通过添加一个空 __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
更改文件夹不会影响该搜索路径。
我最近问过这个
今天我 运行 来自我的终端的脚本作为测试,因为我打算将我的代码移动到我的服务器。但这次脚本因回溯而崩溃:
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
evaluation.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,我在执行恶意行时仔细检查了两者都在文件夹 "evaluation" 中。
处理此问题的典型方法是通过添加一个空 __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
更改文件夹不会影响该搜索路径。