接收导入错误:没有名为***的模块,但具有

2024-05-17 07:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个问题已经问过好几次了,但是在阅读了这些问题,并提出了一些建议后,我仍然感到困惑。

我的项目结构如下:

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'

从上面可以看到,模块根目录有一个__init__.py 所有__init__.py模块都是完全空的。

我们将非常感谢您的帮助。


Tags: 模块项目pysrcprojectinitservicetests
3条回答

尝试将sys.path.append添加到导入列表中。

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(..),您可以查询它)

相关问题 更多 >