没有导入调用的python ImportError

时间:2015-07-24 02:07:27

标签: python python-2.7 importerror

好的,我对这个很难过。我环顾四周但我找不到任何东西,也无法弄清楚如何调试这个。基本上,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调用!

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

所以是的,实际上你在抛出错误时正在进行import调用:你正在取消某种需要ICgen_settings的某种类型的对象。注意:unpickling代码可以运行任意Python语句。永远不要破坏你不信任的物品!

现在,为什么它明确找到ICgen_settings&#34;:不,只是在一个名为ICgen_settings.py的文件中并不意味着该行{{ 1}}会成功。导入是否成功取决于import ICgen_settingssys.path来自您的PYTHONPATH环境变量。它还取决于ICgen_settings的模块布局:通常,它是包含ICgen_settings文件的__init__.py 文件夹(非文件)。