每次更新模块并尝试重新加载后,我都会遇到这个恼人的错误消息。
我在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//')
在其中一个模块中。但这真的很重要吗?
我认为这不重要,因为括号中的路径正好是我的项目路径。
答案 0 :(得分:1)
您的包裹在目前的工作目录中吗?
当解释器遇到import libraryname
语句时,它在several locations中查找libraryname
:当前工作目录,PYTHONPATH
环境变量指定的目录,以及一些安装依赖路径。
因此,只要您的模块位于当前工作目录中,解释器就能够找到它。但是,一旦pwd发生变化,解释器就无法再找到模块,导入失败。你真的有两个选择:
/usr/lib
中(不确定Windows,但您可以轻松找到)。如果你把你的包裹放在那里,那么口译员会把它拿起来。我不建议手工做这件事; write a simple setup.py script为您处理安装。如果由于某种原因无法更改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