我需要通過文件路徑導入python模塊(例如,「/some/path/to/module.py」),只在運行時知道並忽略任何.pyc
文件存在。強制python從文件路徑動態加載模塊時忽略pyc文件
這個previous question建議使用imp.load_module
作爲解決方案,但是這種方法如果存在的話也會使用.pyc
版本。
importme.py
SOME_SETTING = 4
main.py:
import imp
if __name__ == '__main__':
name = 'importme'
openfile, pathname, description = imp.find_module(name)
module = imp.load_module(name, openfile, pathname, description)
openfile.close()
print module
執行兩次,.pyc
文件首先調用後使用:
$ python main.py
<module 'importme' from '/Users/dbryant/temp/pyc/importme.py'>
$ python main.py
<module 'importme' from '/Users/dbryant/temp/pyc/importme.pyc'>
Unfortun ately,imp.load_source
具有相同的行爲(從文檔):
注意,如果正確匹配字節編譯的文件(後綴爲.pyc文件 或.pyo)存在,它將用來代替解析給定的來源 文件。
製作每包含腳本的目錄只讀的是,我所知道的(防止產生.pyc
文件擺在首位),但如果可能的話,我寧願避免它的唯一解決方案。
(注:使用Python 2.7)
爲什麼要防止使用pyc文件?它只會使用pyc文件,如果它與py相同。如果你改變py,它會重新編譯pyc。 – Falmarri
@Falmarri這很複雜。它與不同類型的機器訪問相同的一組python文件有關,它們似乎產生了相同源代碼的不兼容的字節彙編(例如,機器A生成的pyc不能被機器B讀取,導致機器B無法動態地導入模塊);是的,所有機器都使用解釋器二進制。 – awesomo
不同機器編寫不同字節碼的唯一原因是它們運行不同版本的解釋器。 – limscoder