2014-06-09 234 views
1

我面臨奇怪的問題,雖然是新的python。這與幾個論壇上已經提到的看起來有點不同。python導入錯誤無法導入名稱

Directory structure: 

Project_Folder 
-- Folder A 
-- SubFolder A1 
-- Subfolder A2 
-- Subfolder A3 
     -- Folder A3-1 
     -- XYZ.py 
-- Subfolder A4 (this contains utility classes) 
     -- A4-1.py 
     -- A4-2.py 

注意:所有文件夾包含__init__.py,還Python路徑中包含路徑中的所有必需的目錄。

腳本XYZ.py ...依賴於以下2個實用程序類。 scipts開始在sys.path上追加子文件夾A4,所以理想情況下不需要直接使用A4.A4-1.py A4-1應該在導入時工作。就像從A4-2.py進口子方法

但是,這是給一個問題......從A4-1.py進口子方法 以下 爲主題陳述。但是,如果我使用A4.A4-1.py

相同的作品奇怪的部分,是相同的腳本工作在服務器上的項目已經設置。

作爲Python的新手,我需要了解如何從本地機器執行此腳本。 (無需更改或使用模塊名稱導入)

此外,我使用IDE INtelliJ,其中我已將A4作爲依賴項添加到我的項目中。編譯器能夠解決它,但執行是拋出導入錯誤...

任何幫助表示讚賞。

+0

你可以在'__init __。py'周圍加反引號,這樣你就不會大膽,人們不會懷疑這是錯誤。 –

+0

您可以顯示將此目錄添加到路徑的路徑和代碼嗎?另外,您不需要在導入語句中包含'.py'。 – Mark

+0

我沒有得到你對不起,請注意,__init__.py已經存在於文件夾中...我認爲編輯器已經刪除init.py中的下劃線...可能是你困惑嗎? – nukul

回答

1

現在已解決,問題是PYTHONPATH上類似文件夾的衝突,有一個工具存在的路徑,但沒有文件存在...刪除路徑本身後,它在正確路徑上搜索util文件...

1

這些文件是否真的命名爲A4-1.py etc?因爲那給了我一個SyntaxError而不是一個ImportError; (顯然)模塊名稱中不允許使用-符號。這是有道理的,因爲它意味着減去。

如果您在同一probject內進口,我個人說,在大多數情況下,進口這樣

from A4.A4_1 import submethods 

比添加A4到您的路徑,然後從A4_1直接導入更好。

編輯

你能試試,如果你的路徑,如果你解決..工作?

import sys,os,time,datetime 
testdir = os.path.dirname(os.path.abspath(__file__)) 
newdir = os.path.abspath(os.path.join(testdir, '../../utilities')) 
sys.path.append(newdir) 

如果沒有,你可以驗證正確的絕對路徑,包括使用

print sys.path 

EDIT2

如果你正在檢查sys.path,還要確保有沒有另一個目錄匹配導入的開始,但不包含其餘部分(例如submethods)。如果還有另一個目錄A4,也許Python使用了錯誤的目錄。

還要確保名稱不是現有的Python模塊。 (例如,如果您重命名模塊,導入的第一部分仍然有效)。

+0

嗨, A4-1.py只是提供解釋,並避免提供真正的項目類文件名....你可以放心地認爲事情工作正常,並遵循命名約定。 但是,正如前面提到的使用modulename.modulefile導入工作得很好。唯一的問題是添加路徑,然後從文件導入不工作在客戶端上。但在服務器上工作。對Python來說相當新,我沒有得到什麼是抓住。我錯過了什麼,或者我需要額外提供執行此操作的東西。 – nukul

+0

添加到路徑(sys.path.append)應該能夠工作。但正如答案中所建議的,我會堅持使用'modulename.modulefile',這似乎比改變你的路徑來導入更好。 – Mark

+0

問題是,在sys.path.append工作的服務器上,modulename.modulefile doesn; t。並在客戶端otherway周圍....我需要了解什麼配置丟失(至少在客戶端上,使其能夠工作) 你提到sys.path.append應該工作......但在我的情況下,它不是.. .PLs爲此提出任何理由? – nukul

相關問題