2

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

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//')

在其中一个模块中。然而这真的重要吗?

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

4

2 回答 2

2

试试看:

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
于 2013-11-06T07:05:35.760 回答
1

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

当解释器遇到一条import libraryname语句时,它会libraryname几个位置查找:当前工作目录、PYTHONPATH环境变量指定的目录以及一些安装相关路径。

因此,只要您的模块在当前工作目录中,解释器就能够找到它。但是,一旦 pwd 更改,解释器将无法再找到该模块,并且导入失败。你真的有两个选择:

  1. 将您的模块安装在 Python 可以找到的位置。通常,Python 包位于/usr/libLinux 系统上(不确定 Windows,但您可以轻松找到)。如果您将包裹放在那里,那么口译员会取走它。我不建议手动执行此操作;编写一个简单的 setup.py 脚本来为您处理安装。
  2. 告诉 Python 在哪里显式查找包。这通常通过 PYTHONPATH 环境变量来完成。在调用解释器之前在命令行中设置它(或者在系统级别,如果必须的话)。

如果由于某种原因无法更改 PYTHONPATH,则可以在运行时修改路径:

import sys
sys.path.append(your_directory_here)

这是处理问题的一种非常丑陋的方法,因此应该是最后的手段。

于 2013-11-06T06:41:41.290 回答