メインアプリケーションには、ユーザーが有効にできる追加機能がいくつかあります。これらの機能は、独自のディレクトリにあります。これらの機能には、追加の依存関係が必要になる場合があります。requires.txt
それらをそこにファイルに入れることを検討しています。実行時に、機能が壊れるかどうかを人々に知らせたいと考えています。現在、次のようなことを検討しています。
def checkfeature(feature):
everything_okay = True
f = pkg_resources.resource_stream(feature, "requires.txt")
with f:
for r in pkg_resources.parse_requirements(f):
if pkg_resources.working_set.find(r) is None:
print "%r not found, please install, otherwise this feature does not work" % (r,)
everything_okay = False
return everything_okay
これは、物事を行うための正しい、パイソン的な方法ですか? これは理にかなっていますか?
小さな更新:なぜそれほど複雑でtry: import ... except ImportError: ...
、1つの回答で提案されているのと同じではないのですか:
- 私たちのプラグインには、たくさんの依存関係があるかもしれません。以下のような実際のコードを作成するのは非常に冗長です。
- 一部のプラグインでは、特定のバージョンのパッケージが必要になる場合があります。パッケージ固有のテストまたは
pkg_resources
とにかく使用する必要があるテスト。そのため、上記の私のアイデアでは pkg_resources を使用しています。 - 実行可能なプラグインの単体テストを実行したいと考えています。単体テストで ImportError を処理するのは良くありません。関数
can_we_unit_test_this_plugin(plugin)
があると、物事が簡単になります。
2 番目の更新:extra_require
ではどうsetup.py
ですか?
- 人々はそれらを頻繁にインストールするのを逃します。わかりました、悪い言い訳です。
- 私のビジョンは、個々の機能の個々のサブディレクトリで上記から直接
setup.py
ロードすることです。しかし、それは本当に次のステップです。extra_require
requires.txt