2012-06-18 81 views
1

我有以下的目錄結構調用腳本因此,我可以在導入a之前將以下行添加到b.py。Python的相對進口從隨機目錄

sys.path.append(os.path.dirname(sys.argv中[0])+ 「/ ..」)

這工作和我可以從任何目錄調用b.py並且它能夠導入一個。 但是,當我在另一個目錄中編寫腳本以使用execfile()調用此文件時,此操作失敗。

我試過相對導入,但我得到

from ..a import someclass as cls 

了「非套餐錯誤嘗試相對導入」我有兩個test1的__init__.py,test2的

是否有人有一個想法,如何使它工作? 是PYTHONPATH要走的路嗎?

回答

1

問題是execfile將評估您調用的文件爲純Python代碼。 b.py(及其導入的任何包模塊)中的每個相關導入語句都必須保持對您的調用腳本正確。

一個解決方案是不在包中使用任何相對導入路徑。確保test1包也在您的PYTHONPATH上。

b.py

from test1 import a 

隨着test1在你的PYTHONPATH,a應該成功的進口在execfile

>>> import sys 
>>> sys.path.append('/path/to/parent/of_test1') 
>>> execfile('/path/to/parent/of_test1/test1/test2/b.py') 
+0

我有'__init __。py'。它仍然不起作用。 '__file__'是不好的,當我第三個腳本使用execfile調用b.py。打印'__file__'打印其他文件的名稱。 –

+0

@iamrohitbanga:無論如何嘗試允許腳本在依賴其他模塊的程序包中執行「execfile」模塊,我認爲您將面臨問題。 'execfile'評估模塊的純代碼,因此在執行腳本中相關模塊中的所有相關內容也必須相似。 – jdi

+0

我想你是對的。我想我需要四處尋找一個更方便的編譯環境解決方案。 –