2011-09-28 89 views
58

我有以下目錄結構的Python應用程序:導入錯誤:沒有模塊名爲 - Python的

src 
| 
+---- main 
| 
+---- util 
| 
+---- gen_py 
     | 
     +---- lib 

在包主要,我有一個名爲MyServer.py一個Python模塊,它有一個進口聲明一樣:

from gen_py.lib import MyService 

爲了讓這種說法的工作,我把下面一行MyServer.py的開頭:

import sys 
sys.path.append('../gen_py/lib') 

當我在終端中運行MyServer.py,我得到以下錯誤:

ImportError: No module named gen_py.lib

我是缺少在這裏?

+0

你用來運行MyServer.py的命令行是什麼?你在什麼目錄? –

回答

69

您對sys.path的修改假設當前工作目錄始終爲main/。不是這種情況。相反,只需添加父目錄sys.path

import sys 
import os.path 

sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 
import gen_py.lib 

不要忘記在gen_py和lib文件__init__.py - 否則,他們不會被承認爲Python模塊。

+0

這有幫助,謝謝。 –

+0

我有同樣的問題。我使用Windows,Eclipse。我們應該在Eclipse中做什麼? – Ayse

+0

@Ceren此代碼應該可以在每個IDE中使用。你的IDE(或者更確切的說Python插件)可能不會真正執行Python代碼,在這種情況下,你可能需要在某處配置搜索路徑。隨意[問一個新的問題](http://stackoverflow.com/questions/ask)。 – phihag

6

爲了讓Python模塊導入起作用,您的路徑中必須有「src」,而不是「gen_py/lib」。

當處理像import gen_py.lib這樣的導入時,它會查找模塊gen_py,然後查找子模塊lib

由於模塊gen_py將不在「../gen_py/lib」(它將在「..」中),因此您添加的路徑將無助於導入過程。

根據你運行的位置,嘗試添加「src」文件夾的相對路徑。也許它是sys.path.append('..')。您可能還必須成功,而src文件夾中直接運行該腳本,通過相對路徑像python main/MyServer.py

+0

我試過這個sys.path.append('../../ src/gen_py/lib'),但得到相同的錯誤... –

+0

這不是我說的。如果您要導入「gen_py.lib」,則不要將gen_py/lib附加到路徑中。你追加文件夾gen_py在裏面,在這種情況下可能是「..」。 – lunixbochs

5
from ..gen_py.lib import MyService 

from main.gen_py.lib import MyService 

請確保您有在每個目錄(至少是空的)__init__.py文件。

3

確保包含__init__.py,這使得Python的知道,這些目錄containpackages

3

這是如果你正在建設一個包,你是在尋找進口錯誤。我知道這是一個艱難的方式。答案並不是將程序包添加到python路徑中,或者以編程方式執行(如果你的模塊被安裝並且你的命令再次添加它會怎麼樣?)這是一個壞方法。

正確的做法是: 1)使用virtualenv pyvenv-3.4或類似的東西 2)激活開發模式 - $ python setup。py develop

相關問題