亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 從字節 IO 導入(或更一般地從內存中的對象)

Python 從字節 IO 導入(或更一般地從內存中的對象)

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

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

雖然不是像我最初要求的那樣來自對象,但在找到這篇非常有用的文章io.BytesIO后,我能夠從其源中導入模塊。我沒有在這里復制代碼,因為它非常大,盡管我能夠讓它成功導入虛擬模塊。

以下代碼是在我修改加載器以刪除公共前綴后,并通過首先執行源代碼,globals從中獲取,最后使用 Python 的type方法創建模塊類來創建模塊的類。

它不是特別漂亮,而且肯定違反了一些 Python 風格的建議,所以我絕對愿意改進!

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()


查看完整回答
反對 回復 2022-10-06
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號