python 没有导入调用的 ImportError

python ImportError without import call

好吧,我被这个难住了。我环顾四周,但找不到任何东西,也不知道如何调试它。基本上,python 是在我没有导入任何内容的代码行中抛出一个 ImportError。我有一个相当大的模块 ICgen,其中包含模块 ICgen_settings.

Traceback (most recent call last):

File "<ipython-input-5-105e3826f255>", line 1, in <module>
IC = ICgen.load('IC.p')

File "diskpy/ICgen/ICgen.py", line 339, in load
ICobj.settings.load(input_dict['settings'])

File "diskpy/ICgen/ICgen_settings.py", line 484, in load
tmp_dict = pickle.load(open(settings_filename, 'rb'))

ImportError: No module named ICgen_settings

这对我来说没有任何意义。它显然已经找到 ICgen_settings 因为它从内部抛出错误。此外,当它抛出错误时,我没有进行 import 调用!

有什么想法吗?

当您尝试 pickle.load tmp_dict 时,需要加载传入数据流中任何对象的模块。

所以是的,当错误被抛出时,您实际上正在执行 import 调用:您正在解封需要 ICgen_settings 的某种类型的对象。注意:unpickling 代码可以 运行 任意 Python 语句。永远不要解开你不信任的对象!

现在,至于为什么它是 "clearly found ICgen_settings":不,只是在一个名为 ICgen_settings.py 的文件中并不意味着行 import ICgen_settings 会成功。导入是否成功取决于 sys.path,它源自您的 PYTHONPATH 环境变量。它还取决于 ICgen_settings 的模块布局:通常,它将是一个包含 __init__.py 文件的 ICgen_settings 文件夹 (不是文件)。