ImportError:没有名为-Python的模块
我有一个具有以下目录结构的python应用程序:ImportError:没有名为-Python的模块,python,import,Python,Import,我有一个具有以下目录结构的python应用程序: src | +---- main | +---- util | +---- gen_py | +---- lib 在包main中,我有一个名为MyServer.py的python模块,它有一个导入语句,如: from gen_py.lib import MyService 为了使该语句起作用,我在MyServer.py的开头放置了以下行: import sys sys.path.append('
src
|
+---- main
|
+---- util
|
+---- gen_py
|
+---- lib
在包main中,我有一个名为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的模块
这里我遗漏了什么?要使Python模块导入工作,路径中必须有“src”,而不是“gen_py/lib” 处理导入时,如导入gen_py.lib,它会查找模块
gen_py
,然后查找子模块lib
由于模块gen_py
不在“./gen_py/lib”(它将在“..”)中,因此您添加的路径对导入过程没有任何帮助
根据运行它的位置,尝试将相对路径添加到“src”文件夹。可能是sys.path.append(“..”)
。当您直接在src文件夹中运行脚本时,也可以通过相对路径(如python main/MyServer.py
from ..gen_py.lib import MyService
或
确保每个目录上都有一个(至少是空的)
\uuuu init\uuuuuu.py
文件。对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\u py和lib中包含一个文件
\uu init\uuuuuuuuuuuupy
,否则,它们将不会被识别为Python模块。确保包含\uuuuuuu init\uuuuuuuuuuuupy
,这使Python知道那些目录包含包这是在您正在构建包并且在导入中发现错误时发生的情况。答案不是将包添加到python路径,也不是通过编程方式(如果安装了模块,命令又添加了它怎么办?)这是个糟糕的方法
正确的做法是:
1) 使用virtualenv-pyvenv-3.4或类似的工具
2) 激活开发模式-$python setup.py develope确保sys.path输出中是否出现根项目目录。
如果没有,请将根项目目录的路径添加到sys.path。用于运行MyServer.py的命令行是什么?你在哪个目录?我不是这么说的。如果要导入“gen_py.lib”,则不会将gen_py/lib追加到路径中。您附加了文件夹gen_py在里面,在本例中可能是“.”。我也有同样的问题。我使用Windows、Eclipse。我们应该在Eclipse中做什么?@Ceren这段代码应该可以在每个IDE中使用。您的IDE(或者更准确地说,它的Python插件)可能不会实际执行Python代码,在这种情况下,您可能需要在某处配置搜索路径。不用客气。@phihag谢谢!大约一个小时前我问了一个问题,请随意回答=)是否可以将其放在我的主应用程序之外的某个地方?我用这个解决方案来解决我的类似错误,但现在我有一个文件,看起来混乱的进口各地。我认为在init文件中有一种方法可以做到这一点,但我找不到好的示例。
sys.path.append(os.path.join(os.path.dirname(uu文件),“…”)
解析为什么?为什么它不是sys.path.append(os.path.join('..',os.path.dirname(_文件__))?
import sys
import os.path
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import gen_py.lib