0

プラグイン システムのバックエンドとしてYapsyを使用するプログラムに取り組んでいます。ユーザーは独自のプラグインを作成し、実行時にロードできます。ロードされたすべてのプラグインをそれぞれ独自のメニュー項目として表示するメニューがあります。また、プログラムには 2 つの既製のプラグインも提供しています。これらの事前に作成されたプラグインは、Eclipse を介してプログラムを実行すると問題なくロードされます (つまり、メニューに両方のプラグインが表示されます)。ただし、cx_Freeze を使用して実行可能ファイルを作成した後、何らかの理由でプラグインが正しく読み込まれません。両方のプラグインが同じディレクトリにあり、コードが変更されていないため、最初のプラグインのみが見つかりました。Yapsyに何か問題があるのだろうか?プラグインが 1 つしか見つからないのはなぜでしょうか。

既製のプラグインを取得する方法の例を次に示します。

default_dir = os.path.expanduser('~') + os.sep + "plugins"

if xml.get_plugin_directory() == "":
    directory = [default_dir] # no user specified directory
else:
    directory = [default_dir, xml.get_plugin_directory()] # user specified dir too

# Load the plugins from the specified plugin directory/s.
manager = PluginManager()
manager.setPluginPlaces(directory)
manager.setPluginInfoExtension('plugin')
manager.collectPlugins()

for plugin in manager.getAllPlugins():
    ...

ご覧のとおり、デフォルトのディレクトリを設定し (常に作成されているはずであり、確認するためにこれをテストしました)、プラグインの場所をそのディレクトリまたはそのディレクトリとユーザー指定のディレクトリに設定しますyapsy.PluginManager().setPluginPlaces(directory)。デフォルトのプラグインの場所は、私の Eclipse ワークスペースにはありません。それは別の場所に存在します。前に述べたように、これは Eclipse を介してプログラムを実行する場合は問題なく動作しますが、実行可能ファイルを作成すると、プラグインが 1 つしか見つかりません。プラグインが見つからないというエラーが発生することを期待しますが、一方が実際に見つかり、もう一方が見つからないというのは奇妙です。また、さらにテスト プラグイン ファイルをデフォルト ディレクトリに追加すると、これらが検出されます。Yapsy が 2 番目のプラグインを完全にスキップするかのようです (実行可能ファイルの実行時のみ)。

この動作が発生する理由はありますか?

ありがとう、アダム

4

1 に答える 1

2

あなたの問題を説明する方法では、テストしたすべてのプラグインのうち 1 つだけを yapsy がロードできないようです。

推測する必要がある場合、Eclipse の外部で読み込まれないプラグインにはインポート エラーがあると言えます (Eclipse のインポート パスが異なる可能性があり、Eclipse 内で試したときにこのインポート エラーが発生しない可能性があります)。

もちろん、これは単なる推測であり、もう少し深く調査するために、Yapsy がかなり標準的な方法で使用する Python ロギング モジュールを介して、より多くのデバッグ情報を表示できます。

デバッグ レベルの情報を有効にするには、次のコードを使用できます。

import logging
logging.basicConfig(level=logging.DEBUG)

問題が解決されない場合は、プラグインとプラグイン マネージャー コードを削除したバージョンで Yapsy のトラッカーにバグを送信できます。トラッカーはhttp://sourceforge.net/tracker/?group_id=208383にあります。

于 2012-07-31T09:46:09.880 に答える