2015-09-18 106 views
3

我的文件目录树是这个样子:Python的 “导入错误:没有模块名为...”,但模块存在

my_repo 
├── experiments 
│   ├── foo.py 
│   └── __init__.py 
└── tests 
    ├── baz.py 
    └── __init__.py 

里面baz.py,我尝试

from experiments.foo import FooExperiment 

,但我得到

*** ImportError: No module named experiments.foo 

当我从终端(Mac OSX 10.9)打开python并运行

from experiments.foo import FooExperiment 

类是正确导入。到底是怎么回事?请帮忙。

在这两种情况下sys.path是完全一样的,除非我在baz.py当前路径(至baz.py)被包括在内。是的/path/to/my_repo是我sys.path为好。

编辑:我的问题是与相互冲突的蛋文件,所以重新安装的伎俩(下)。接受@奥斯汀马歇尔的答案,但因为这是解决这个问题的一般情况的可行解决方案。

pip uninstall my_repo 
python setup.py develop --user 
+0

您可以包括当出现错误时,是否显示'sys.path'?其他'experminets'软件包或模块是否可以放在'sys.path'中,它映射在'my_repo'中创建的'experiments'包? –

+0

你如何运行'baz.py'?我看到它在测试目录中,你是否使用py.test? – sax

+0

@AnandSKumar没有其他'experiments'包或模块,但鸡蛋文件被重复了三次:'/Users/my_name/Library/Python/2.7/lib/python/site-packages/experiments-0.0.1-py2.7 .egg'。这是一个问题吗? – BoltzmannBrain

回答

2

experimentsPYTHONPATH,也没有使用标准是安装 setuptools技术。我能够复制您的问题,这是通过将my_repoPYTHONPATH解决:

Austins-MacBook-Pro-2:my_repo amarshall$ tree . 
. 
├── experiments 
│   ├── __init__.py 
│   └── foo.py 
└── tests 
    ├── __init__.py 
    └── baz.py 

2 directories, 4 files 
Austins-MacBook-Pro-2:my_repo amarshall$ PATH=$PATH:`pwd`/experiments python tests/baz.py 
Traceback (most recent call last): 
    File "tests/baz.py", line 1, in <module> 
    from experiments.foo import FooExperiment 
ImportError: No module named experiments.foo 
Austins-MacBook-Pro-2:my_repo amarshall$ PYTHONPATH=$PYTHONPATH:`pwd` python tests/baz.py 

那里没有输出或错误时,指定PYTHONPATH最后一行,而不是PATH

-1

我通常使用以下方法来追加到sys.path的路径:

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

随着

Import sys, os 
+1

每当我想导入一个类时手动添加到路径不是一个好的解决方案。 – BoltzmannBrain

+0

这不是真的手动,因为这两行生活在我的文件“bad.py”的开头。这是我发现在“上”文件夹中导入模块的最佳解决方案(如果有意义的话) –

相关问题