2016-12-06 56 views
0

我有一個Python GUI,可以在運行時加載和運行插件包。插件包只是一個Python包,包含插件代碼所需的所有附加庫。這些額外的庫存儲在插件的site-packages子文件夾中。一個典型的插件的文件結構是這樣的:根據使用的插件使用不同版本的Python包

myplugin/__init__.py 
myplugin/plugin_main.py 
myplugin/site-packages/foolib/__init__.py 
myplugin/site-packages/foolib/foo_main.py 

爲了使plugin_main.py能夠導入就像我在plugin_main添加該代碼添加的站點包子目錄PYTHONPATH foolib庫。 py:

import sys 
packages_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "site-packages") 
sys.path.insert(1, packages_path) 
import foolib 

到目前爲止,這麼好。這基本上起作用。問題是,如果GUI加載了第二個應該導入自己版本的foolib的插件,實際上第一個插件的foolib版本會被使用。換句話說:即使不同的插件在其站點包子文件夾中附帶了不同版本的foolib,它也始終與GUI中使用的版本相同。

我需要的是當GUI加載myplugin時,應該使用來自myplugin/site-packages的foolib。如果之後加載myotherplugin,則應使用myotherplugin/site-packages中的foolib,而不是myplugin/site-packages中的foolib。我希望我明確地解決了這個問題。

在這種情況下imp包是否有幫助?

回答

0

我不得不認識到,沒有安全的方法來實現我試圖做的事情。相反,我最終使用Python多處理將每個插件移動到單獨的進程中。這實際上很容易做到,無論如何可能是最乾淨的解決方案。

相關問題