1

ユーザーがプラグインを使用して拡張できるアプリケーションがあります。ユーザーがプラグインからアクセスできるように、いくつかのヘルパー モジュールを提供しています。

import helpermodule

ここで、ヘルパー モジュールのパッケージを変更して、すべてのヘルパー モジュールが次のようにメイン パッケージから読み込まれるようにする方がよいと判断しました。

from ourpackage import helpermodule

ユーザープラグインの既存のコードを壊したくないので、今でも古い方法を提供しています。(実際、ソース__init__.pyの dir 内のファイルにヘルパー モジュールをインポートしたところです。)ユーザー スクリプトが古い方法でヘルパー モジュールをインポートした場合、ourpackage(標準ライブラリを使用して) 警告を発行したいと考えています。warnings

だから私の質問は: ユーザーが「間違った」方法でヘルパー モジュールをインポートしたかどうかを確認する方法はありますか? 理想的には、ユーザーのコードを検査せずにこれを達成したいと考えています。

4

1 に答える 1

1

それは、「まだ古い方法を提供する」ことをどのように達成しているかによって異なります。古いモジュールを直接検索パスに残し、import helpermoduleパッケージ内で実行しているようです。(つまり、あなた自身はまだ「間違った」方法でモジュールをインポートしています。) その場合、1 つの可能性があります。

\dir_on_path
helper.py
    \ourpackage
        __init__.py

#### helper.py
import sys
if 'testpack' in sys.modules:
    print "Imported the good way"
else:
    print "Imported the bad way"
####

#### __init__.py
import teststuff
####

ただし、この方法では厄介な問題が残ることに注意してください。できなくなりますimport testpack.teststuff。また、sys.modules に 2 つの別々のコピーを作成して、良い方法と悪い方法の両方で teststuff をインポートする可能性が残っています。

これが「まだ古い方法を提供している」方法ではない場合は、編集して明確にしてください。

于 2012-05-31T07:42:31.797 に答える