2016-09-29 52 views
0

我有兩個所謂的相同的系統。在兩個系統上,我都運行相同的軟件,但在其中一個上,它不能正常工作。imp.load_source加載錯誤的模塊

我試圖在用戶提供的.py文件中運行函數。我已經減少這再現錯誤以下基本代碼:

import imp 
with open("test_scripts/load_offsets.py") as fp: 
    module = imp.load_source("load_offsets", "test_scripts", fp) 

dir(module) 

在第一個系統中,輸出是正確的:

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'os', 'test_load_offsets'] 

我看到一個名爲test_load_offsets一個功能,符合市場預期。

在第二個系統,我得到下面的輸出:

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'test_reset_position'] 

請注意,我現在看到不同的功能:test_reset_position。但是,在這兩個系統上,文件test_scripts/load_offsets.py完全相同!更重要的是,在這個文件中沒有功能test_reset_position

但是,有一個功能test_reset_position在不同的文件,即test_scripts/reset_position.py。另外,在我執行代碼示例的目錄中,有一個文件test_scriptsc(這兩種系統都是這種情況)。它包含我認爲的字節碼,但在我看到問題的系統上,我可以識別其中的文件test_scripts/test_reset_position.py的一部分。如果我刪除test_scriptsc,它再次正常工作,直到加載一個不同的文件,然後問題再次開始。

所以,我的結論是,在有問題的系統上,文件test_scriptsc沒有正確更新。但是,我不明白爲什麼,也不明白爲什麼問題只出現在兩個系統中的一個系統上。我可以在兩個系統之間找到的唯一區別是,有問題的系統在Ubuntu Linux 16.04.1上運行Python Python 2.7.12,而沒有問題的系統在Ubuntu 16.04上運行Python 2.7.11+。

有人能幫我找出這裏發生了什麼嗎?我不知道要尋找什麼......

+0

如果您查看兩個系統上「module .__ file__」的值,您會得到什麼結果? – BrenBarn

+0

對於兩個系統'module .__ file__'都是'test_scriptsc'。 – Ludo

回答

0

它失敗的原因是因爲我做錯了。 load_source的第二個參數應該是源文件的完整路徑,而不僅僅是包含它的目錄Python 2.7.12 documentation。 我不知道爲什麼我來到了我的實現,我也不知道爲什麼Python的2.7.11是接受也無妨,但解決的辦法是做正確的方式:

​​

這正確,得出:

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'os', 'test_load_offsets'] 

我認爲該文件是test_scriptsc字節編譯.py文件的嘗試,但因爲我沒有給出完整的路徑,我結束了東西,是編譯整理的-目錄。顯然,Python 2.7.11與Python 2.7.12的處理方式不同。

相關問題