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桌面文件夹中的文件夹所致。