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

Mar*_*nds 11 python importerror python-3.x

我知道这个问题已被多次询问,但在阅读完之后,并提出建议的修复方法,我仍然感到难过.

我的项目结构如下:

Project
      |
      src
        |
         root - has __init__.py
            |
            nested - has __init__.py
                  |
                  tests - has __init__.py
                  |
                  utilities - has __init__.py
                  |
                  services - has __init__.py
Run Code Online (Sandbox Code Playgroud)

我已成功运行Eclipse中的单元测试回归类,没有任何问题.

一旦我尝试从命令行运行相同的类(因为将运行该套件的其他用户无权访问Eclipse),我收到错误:

ImportError: No module named 'root'
Run Code Online (Sandbox Code Playgroud)

从上面可以看出,模块根目录中的__init__.py 所有__init__.py模块都是空的.

我们将非常感激地提供援助.

Gus*_*s E 16

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

import sys
sys.path.append("/Project/src/")
import root
import root.nested.tests
Run Code Online (Sandbox Code Playgroud)

  • @CGFoX你需要首先导入sys,回答修改以反映这一点 (2认同)

Mar*_*nds 14

对于任何到达此问题的人来说,使用Gus E在接受答案中显示的内容以及一些进一步的经验我发现以下内容非常有用,以确保我可以从我的机器上的命令行运行我的程序如果需要,或在另一位同事身上.

import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))
Run Code Online (Sandbox Code Playgroud)

当我执行位于'嵌套'目录中的'main'方法时,它确保在执行时将'src'目录添加到PYTHONPATH,这意味着所有后续导入都不会引发错误.

显然,您需要调整os.path.join()方法的".."参数的数量,这取决于程序中执行主方法的位置.

  • 这让我免去很多痛苦。谢谢你! (2认同)