私はgithubでソフトウェアを書いています。これは基本的に、いくつかの追加機能を備えたトレイ アイコンです。オプション機能の基本的な依存関係を実際にユーザーにインストールさせることなく、実際に機能するコードを提供したいのですが、使用しないものを実際にインポートしたくないので、このようなコードは「良い解決策":
---- IN LOADING FUNCTION ----
features = []
for path in sys.path:
if os.path.exists(os.path.join(path, 'pynotify')):
features.append('pynotify')
if os.path.exists(os.path.join(path, 'gnomekeyring.so')):
features.append('gnome-keyring')
#user dialog to ask for stuff
#notifications available, do you want them enabled?
dlg = ConfigDialog(features)
if not dlg.get_notifications():
features.remove('pynotify')
service_start(features ...)
---- SOMEWHERE ELSE ------
def service_start(features, other_config):
if 'pynotify' in features:
import pynotify
#use pynotify...
ただし、いくつかの問題があります。ユーザーが自分のマシンをフォーマットし、OS の最新バージョンをインストールして、このアプリケーションを再展開すると、警告なしに機能が突然消えます。解決策は、構成ウィンドウにこれを表示することです。
if 'pynotify' in features:
#gtk checkbox
else:
#gtk label reading "Get pynotify and enjoy notification pop ups!"
しかし、これが mac の場合、ユーザーが満たすことのできない依存関係を探してワイルド グース チェイスにユーザーを送っていないことをどのように知ることができますか?
2番目の問題は次のとおりです。
if os.path.exists(os.path.join(path, 'gnomekeyring.so')):
問題。ファイルがすべての Linux ディストリビューションで常に gnomekeyring.so と呼ばれていることを確認できますか?
他の人はこれらの機能をどのようにテストしていますか? 基本の問題点
try:
import pynotify
except:
pynotify = disabled
コードがグローバルであるということです。これらは散らばっている可能性があり、ユーザーがpynotifyを望まなくても....とにかくロードされます。
では、この問題を解決する最善の方法は何だと人々は考えているのでしょうか?