2015-09-18 82 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」的開頭。這是我發現在「上」文件夾中導入模塊的最佳解決方案(如果有意義的話) –

相關問題