語境:我目前有一個(gè)程序,它使用另一個(gè)SO 線程中顯示的方法從它們的文件路徑(在映射的網(wǎng)絡(luò)驅(qū)動(dòng)器中)加載一組插件。這些插件被設(shè)計(jì)為滾動(dòng)發(fā)布,這意味著我需要不斷地訪問來編寫它們。當(dāng)前機(jī)制鎖定文件,所以我必須要求所有人關(guān)閉軟件,以便我可以更新文件。問題:我想知道是否有一種方法,可能使用與上面鏈接的方法類似的方法,從io.BytesIO插件原始內(nèi)容的對象中導(dǎo)入文件(因此解鎖文件讓我隨意進(jìn)行更改)。更普遍:更具體地說,我可以在不接觸物理磁盤的情況下將原始模塊內(nèi)容保存在內(nèi)存中嗎?如果這樣的事情是不可能的,有沒有辦法將這些模塊完全加載到內(nèi)存中,這樣我就可以解鎖正在導(dǎo)入的文件?正如我在評論中所說,我知道您可以在基于 Linux 的操作系統(tǒng)上安裝虛擬文件系統(tǒng)(這可能解決了我的問題),但遺憾的是,我為 Windows 和 Microsoft 開發(fā)永遠(yuǎn)無法讓您的生活變得輕松!:-)筆記:我不是在問我可以在哪里復(fù)制這些文件以從本地版本(例如臨時(shí)、緩存等)導(dǎo)入它們。我知道這是一個(gè)非常專業(yè)的問題,因此非常感謝任何幫助
1 回答

Smart貓小萌
TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
雖然不是像我最初要求的那樣來自對象,但在找到這篇非常有用的文章io.BytesIO
后,我能夠從其源中導(dǎo)入模塊。我沒有在這里復(fù)制代碼,因?yàn)樗浅4?,盡管我能夠讓它成功導(dǎo)入虛擬模塊。
以下代碼是在我修改加載器以刪除公共前綴后,并通過首先執(zhí)行源代碼,globals
從中獲取,最后使用 Python 的type
方法創(chuàng)建模塊類來創(chuàng)建模塊的類。
它不是特別漂亮,而且肯定違反了一些 Python 風(fēng)格的建議,所以我絕對愿意改進(jìn)!
source = """def hello():
print("I don't want to say hi to the world")"""
name = "my_module"
glo = {}
exec(source, glo)
injector = DependencyInjector()
injector.provide(name, type(name, (), glo))
injector.install()
foo = __import__(name)
foo.hello()
添加回答
舉報(bào)
0/150
提交
取消