我有兩個所謂的相同的系統。在兩個系統上,我都運行相同的軟件,但在其中一個上,它不能正常工作。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+。
有人能幫我找出這裏發生了什麼嗎?我不知道要尋找什麼......
如果您查看兩個系統上「module .__ file__」的值,您會得到什麼結果? – BrenBarn
對於兩個系統'module .__ file__'都是'test_scriptsc'。 – Ludo