2016-12-06 5 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にこのコードを追加することによって、PYTHONPATHへのsite-packagesサブディレクトリを追加しましたfoolibのようなライブラリをインポートすることができplugin_main.pyにするために。 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の独自のバージョンをインポートする必要がある2番目のプラグインを読み込んだ場合、実際に最初のプラグインのfoolibバージョンが代わりに使用されることです。言い換えれば、別のプラグインがsite-packagesサブフォルダに異なるバージョンのfoolibを持っていても、常にGUIで使用されるのと同じバージョンです。

私が必要とするのは、GUIがmypluginをロードするときに、myplugin/site-packagesからfoolibを使用する必要があるということです。 myotherpluginを後で読み込む場合は、myplugin/site-packagesからではなく、myotherplugin/site-packagesのfoolibを使用する必要があります。私は問題を明確にしたかったと思う。

impパッケージはこの場合に役立ちますか?

答えて

0

私がやろうとしたことを達成するための安全な方法がないことを認識しなければなりませんでした。代わりに、私はPythonのマルチプロセッシングを使って、各プラグインを別のプロセスに移動させました。それは実際には非常に簡単で、とにかくおそらく最もクリーンなソリューションです。

関連する問題