2014-01-17 225 views
1

我正在尋找一些關於我遇到的python問題的建議。我是python的新手。我相信我依靠其他語言的編程經驗來完成這項工作,並且我終於停滯不前。這裏是場景,我正在導入一個依賴於另一個模塊的模塊。從相對路徑導入模塊

我的節目,叫司機test.py,開始時是這樣的:在QueryDDEX.py文件

import sys 
sys.path.append(r'C:\Program Files (x86)\Zorba XQuery Processor 2.9.1\share\zorba\uris\com\nuemeta\www\modules\DDEXpedite\bindings\Python\Code and Other Files') 

import QueryDDEX 

然後,我有:

import sys,os 

temp = os.getcwd() 
os.chdir(os.path.dirname(os.path.realpath(__file__))) 
sys.path.append(os.path.realpath("..\..\..\..\..\..\..\..\..\python")) 

print sys.path 

import zorba_api 

os.chdir(temp) 

在我腦子裏,我想(1)保存當前工作目錄,(2)將當前工作目錄更改爲QueryDDEX.py模塊的目錄,(3)從相對路徑導入zorba_api模塊,因爲如果我將此模塊部署到其他計算機上,它們可能不會與我的文件結構相同,(4)更改當前的工作目錄回到最初的樣子。

現在,我已經讀過,使用相對路徑並不好,我也讀過它是好的。我沒有看到另一個選擇,因爲我沒有寫zorba_api,所以我沒有太多的控制權。無論如何,該程序的輸出是這樣的:

['C:\\Users\\Administrator\\Desktop', 'C:\\Python27\\Lib\\idlelib', 'C:\\Windows\\SYSTEM32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\uris\\com\\nuemeta\\www\\modules\\DDEXpedite\\bindings\\Python\\Code and Other Files', 'C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\python'] 

Traceback (most recent call last): 
    File "C:\Users\Administrator\Desktop\Test.py", line 4, in <module> 
import QueryDDEX 
    File "C:\Program Files (x86)\Zorba XQuery Processor 2.9.1\share\zorba\uris\com\nuemeta\www\modules\DDEXpedite\bindings\Python\Code and Other Files\QueryDDEX.py", line 9, in <module> 
    import zorba_api 
ImportError: No module named zorba_api 

這就是事情在我看來變得棘手時,zorba_api模塊位於

C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\python 

,我們可以通過我的調試語句看到它IS在python類路徑中。那麼,爲什麼我會得到這個錯誤?

回答

1

看看這個場景。您的文件alpha.pyC:\projects\test\。然後,你也有一個在C:\projects\test\modules\beta.py所以導入betaalpha你應該做的文件:

import modules.beta 

或者說,不是很好,但有用的,加入modules目錄到sys.path

然後,如果你想從你的beta.py文件導入模塊,你將不得不注意你不在C:\projects\test\modules\目錄,你在alpha.py目錄。因此,舉例來說,如果有一個在modules/稱爲gamma.py第三個文件,如果你想從beta.py導入它,你應該使用:

import modules.gamma 

因爲你是在進口商文件alpha.py)路徑,而不是在導入文件beta.py)路徑。

希望它有助於解決您的問題!

+0

我明白你在說什麼,但也許我不知道,因爲我仍然不明白爲什麼我的解決方案在這種情況下不起作用。我將當前工作目錄更改爲__file__,因此它位於模塊的位置,然後嘗試使用從第一個模塊到第二個模塊的相對路徑。它適用於我使用絕對路徑。最後,我能做些什麼來解決它?我開始明白爲什麼我的程序不能正常工作,但現在我更加困惑於如何讓它工作。 – zg303

+0

在你的'QueryDDEX中追加一個新路徑。py'文件你應該注意你在'test.py'路徑,所以也許你提供的路徑是錯誤的。 – cdonts

+0

原來我是我的相對路徑中的一個目錄,添加「/../」解決了這個問題。感謝您的幫助,如果沒有您,需要花費更長的時間進行調試。 – zg303

相關問題