导入错误:没有模块名为 - Python的
我有以下目录结构的Python应用程序:导入错误:没有模块名为 - 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: No module named gen_py.lib
我是缺少在这里?
您对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文件__init__.py
- 否则,他们不会被承认为Python模块。
为了让Python模块导入起作用,您的路径中必须有“src”,而不是“gen_py/lib”。
当处理像import gen_py.lib
这样的导入时,它会查找模块gen_py
,然后查找子模块lib
。
由于模块gen_py
将不在“../gen_py/lib”(它将在“..”中),因此您添加的路径将无助于导入过程。
根据你运行的位置,尝试添加“src”文件夹的相对路径。也许它是sys.path.append('..')
。您可能还必须成功,而src文件夹中直接运行该脚本,通过相对路径像python main/MyServer.py
我试过这个sys.path.append('../../ src/gen_py/lib'),但得到相同的错误... –
这不是我说的。如果您要导入“gen_py.lib”,则不要将gen_py/lib附加到路径中。你追加文件夹gen_py在里面,在这种情况下可能是“..”。 – lunixbochs
from ..gen_py.lib import MyService
或
from main.gen_py.lib import MyService
请确保您有在每个目录(至少是空的)__init__.py
文件。
确保包含__init__.py
,这使得Python的知道,这些目录containpackages
这是如果你正在建设一个包,你是在寻找进口错误。我知道这是一个艰难的方式。答案并不是将程序包添加到python路径中,或者以编程方式执行(如果你的模块被安装并且你的命令再次添加它会怎么样?)这是一个坏方法。
正确的做法是: 1)使用virtualenv pyvenv-3.4或类似的东西 2)激活开发模式 - $ python setup。py develop
你用来运行MyServer.py的命令行是什么?你在什么目录? –