IPython:ImportError:没有名为mymodule的模块

时间:2013-11-06 06:29:22

标签: python

每次更新模块并尝试重新加载后,我都会遇到这个恼人的错误消息。

我在mymodule个包中有一个模块mypackage,其中包含__init___.py个文件。

当我这样做时

from mypackage import mymodule

一切都很好。

更新模块后,用

重新加载
reload(mymodule)

弹出错误:

In [4]: 
   ...: reload(constants)
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-4-264a569b44f9> in <module>()
      1 
----> 2 reload(mymodule)

ImportError: No module named mymodule

要解决这个问题,当我想重新加载一个模块时,我必须杀死我的解释器并重新导入所有内容,这非常耗时且烦人。我该如何解决?

PS: 我怀疑这是PYTHONPATH的错误,但由于我在Visual Studio中使用Python工具,我找不到PYTHONPATH选项。


更新

据我所知,似乎事情在我有了这个

后立即出现问题
import os
os.chdir(constants.PROJECT_PATH + '//data//')

在其中一个模块中。但这真的很重要吗?

我认为这不重要,因为括号中的路径正好是我的项目路径。

2 个答案:

答案 0 :(得分:1)

您的包裹在目前的工作目录中吗?

当解释器遇到import libraryname语句时,它在several locations中查找libraryname:当前工作目录,PYTHONPATH环境变量指定的目录,以及一些安装依赖路径。

因此,只要您的模块位于当前工作目录中,解释器就能够找到它。但是,一旦pwd发生变化,解释器就无法再找到模块,导入失败。你真的有两个选择:

  1. 将模块安装在Python可以找到的位置。通常,Python软件包位于Linux系统上的/usr/lib中(不确定Windows,但您可以轻松找到)。如果你把你的包裹放在那里,那么口译员会把它拿起来。我不建议手工做这件事; write a simple setup.py script为您处理安装。
  2. 告诉Python在哪里显式查找包。这通常通过PYTHONPATH环境变量完成。在调用解释器之前在命令行设置它(如果必须,则在system-level处设置)。
  3. 如果由于某种原因无法更改PYTHONPATH,则可以在运行时修改路径:

    import sys
    sys.path.append(your_directory_here)
    

    这是处理问题的一种非常难看的方式,所以应该是最后的手段。

答案 1 :(得分:1)

试一试:

import os, sys
my_lib_path = os.path.abspath('../../../mypackage')
sys.path.append(my_lib_path)
from mypackage import mymodule

或将您的包添加到PYTHONPATH中。对于unix它:

$ export PYTHONPATH=/absolute/path/to/mypackage