Python 接收导入错误:没有名为***的模块,但具有_uinit_uu.py
我知道这个问题已经被问了好几次了,但在阅读了它们并提出了建议的解决方案之后,我仍然感到困惑 我的项目结构如下:Python 接收导入错误:没有名为***的模块,但具有_uinit_uu.py,python,python-3.x,importerror,Python,Python 3.x,Importerror,我知道这个问题已经被问了好几次了,但在阅读了它们并提出了建议的解决方案之后,我仍然感到困惑 我的项目结构如下: Project | src | root - has __init__.py | nested - has __init__.py | tests - has __init__.py
Project
|
src
|
root - has __init__.py
|
nested - has __init__.py
|
tests - has __init__.py
|
utilities - has __init__.py
|
services - has __init__.py
我已经成功地从Eclipse运行了一个unittest回归类,没有任何问题
当我试图从命令行运行同一个类时(因为将运行该套件的其他用户没有访问Eclipse的权限),我收到了错误:
ImportError: No module named 'root'
从上面可以看到,模块根有一个\uuuu init\uuuuu.py
所有\uuuu init\uuuu.py
模块都完全为空
我们将非常感激您的帮助。尝试添加一个
sys.path。将附加到导入列表中
import sys
sys.path.append("/Project/src/")
import root
import root.nested.tests
对于任何一个遇到这个问题的人来说,使用Gus E在接受答案中所展示的内容和一些进一步的经验,我发现以下内容非常有用,可以确保在需要时,我可以从我的机器上或其他同事的机器上的命令行运行我的程序
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))
当我执行位于“嵌套”目录中的“main”方法时,它确保在执行时将“src”目录添加到PYTHONPATH,这意味着所有后续导入都不会抛出错误
显然,您需要调整os.path.join()
方法的“.”参数的数量,这取决于程序中执行主方法的位置,如果有人在此处登陆:
我也遇到了这个错误。在我的例子中,我在path.sys.append(…)
中使用了~/my/path/
,修复程序将~
替换为显式路径名(在linux shell上键入pwd
或使用os.path.expanduser(…)
)在没有路径的情况下解决这个问题的另一种方法是这样的:考虑下面的代码,在你的文件夹名“app”中,你有3个文件x.py,y.py和一个空的<强> init <强> .py。因此,要运行x.py,您需要从y进行导入,以便:
x.py
from app.y import say_hi
print ("ok x is here")
say_hi()
print ("Im Y")
def say_hi():
print ("Y says hi")
及
y.py
from app.y import say_hi
print ("ok x is here")
say_hi()
print ("Im Y")
def say_hi():
print ("Y says hi")
因此,文件夹结构如下所示:
testpy
app
__init__.py
x.py
y.py
解决方案:在应用程序之前的文件夹中执行以下操作:
$ python -m app.x
注意:我没有使用x.py(只是app.x)
结果:
Nespresso@adhg MINGW64 ~/Desktop/testpy
$ python -m app.x
Im Y
ok x is here
Y says hi
src
是否在您的sys.path
上?您是在该目录中运行Python命令,还是已将src
显式添加到sys.path
(或PYTHONPATH
环境变量)?@Martijin:我正在尝试从“..\tests目录”中执行。“scr”未添加到“sys.path”或“PYTHONPATH”中。我没有意识到这是必要的,这是第一次尝试通过命令行执行。我将尝试将目录添加到“PYTHONPATH”中,我不建议将其添加到路径中。我建议您学习如何设置setup.py
,这意味着实际创建一个Python项目。从长远来看,这对您很有帮助。@MartijnPieters:谢谢,我已经添加了sys.path
,现在一切都好了。我对你的评论投了赞成票@CPP学习者:现在就开始阅读。非常有用,也请投你一票,谢谢。谢谢,正是需要的。我得到名称错误:尝试此操作时未定义名称“sys”。@CGFoX您需要先导入sys,答案已修改以反映这一点。这为我节省了很多痛苦。非常感谢。如果这不起作用,请尝试在sys.path:sys.path=[os.path.join(os.path.dirname(\uuuuu file\uuuu),“.”、“.”“)+sys.path
前加前缀,然后它可能会起作用。我不确定这是否是由于我的项目文件夹是windows 10桌面文件夹中的文件夹所致。