我有一个python应用程序,它的目录结构如下:
src
|
+---- main
|
+---- util
|
+---- gen_py
|
+---- lib
在主包中,我有一个名为MyServer.py的python模块,它有一个导入语句,如下所示:
from gen_py.lib import MyService
为了使此语句起作用,我在MyServer.py的开头放置了以下行
import sys
sys.path.append('../gen_py/lib')
当我在终端中运行MyServer.py时,我得到以下错误:
ImportError:没有名为gen_py.lib的模块
我在这里错过了什么?
发布于 2011-09-29 02:08:58
您对sys.path
的修改假定当前工作目录始终位于main/
中。事实并非如此。相反,只需将父目录添加到sys.path
import sys
import os.path
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import gen_py.lib
不要忘记在gen_py和lib中包含一个文件Python -否则,它们不会被识别为Python模块。
发布于 2011-09-29 02:04:09
要使Python模块导入工作,路径中必须有"src“,而不是"gen_py/lib”。
在处理像import gen_py.lib
这样的导入时,它先查找模块gen_py
,然后查找子模块lib
。
由于模块gen_py
不在“../gen/lib”中(它将在“..”中),因此您添加的路径对导入过程没有任何帮助。
根据您运行它的位置,尝试将相对路径添加到"src“文件夹。也许是sys.path.append('..')
。在src文件夹中通过相对路径(如python main/MyServer.py
)直接运行脚本也可能会成功
发布于 2011-09-29 02:06:46
from ..gen_py.lib import MyService
或
from main.gen_py.lib import MyService
确保每个目录上都有一个(至少是空的) __init__.py
文件。
https://stackoverflow.com/questions/7587457
复制相似问题