2013-05-10 101 views
8

我明白这个问题已被多次询问,但在阅读完这些建议的修复之后,我仍然难倒了。接收导入错误:没有模块命名为***,但有__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运行一个单元测试回归类没有任何问题。

当我试图运行在命令行相同的类(如谁在将运行一套用不上到Eclipse的其他用户),我收到错误:

ImportError: No module named 'root' 

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

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

+1

是'你的'sys.path中src' '?你是在那个目录下运行Python命令还是你明确地在你的'sys.path'(或'PYTHONPATH'环境变量)中添加了'src'? – 2013-05-10 11:10:30

+0

@Martijin:我试图从'.. \ tests目录中执行。' 'scr'未被添加到'sys.path'和'PYTHONPATH'。我不知道它需要,这是第一次尝试通过命令行执行。我会尝试添加目录到'PYTHONPATH' – 2013-05-10 11:15:19

+4

我不会建议添加到路径。我建议你学习如何设置setup.py,这意味着实际上创建一个Python项目。从长远来看,这可以帮助你。 – CppLearner 2013-05-10 11:15:57

回答

11

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

import sys 
sys.path.append("/Project/src/") 
import root 
import root.nested.tests 
+0

谢谢,正是需要的。 – 2013-05-10 11:24:43

+0

尝试这样做时,我得到'NameError:name'sys'未定义'。 – CGFoX 2017-03-07 10:30:27

+2

@CGFoX你需要先导入sys,回答修改才能体现这个 – 2017-03-07 14:07:25

7

只是对任何人注意到谁在这个问题上到达时,使用的是什么格斯Ë显示,在接受答案和一些进一步的经验,我发现下面几点是非常有用的,以确保我可以运行我的程序如果需要的话,我的机器上的命令行或其他同事的命令行。

import sys 
import os 
sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..")) 

当我执行“主”方法,它位于在“嵌套”目录,它确保了“src”目录是在执行时加入到PYTHONPATH意味着所有以下进口将不抛出一个错误。

显然,你需要调整数量“..”参数传递给os.path.join()方法由位置在哪里你的主要方法是从

+0

这节省了我很多的痛苦。谢谢! – 2017-01-18 16:30:11

0

执行的程序确定如果有人土地位置:

我也遇到过这个错误。就我而言,我在path.sys.append(...)使用~/my/path/,并修复与显式路径名称替换~(您可以来电咨询,如果你键入pwd当你在~

相关问题