3

作業中のさまざまなコード用の Python ライブラリを保持しています。これは、コードを共有したり、一度だけ実装したり、一貫性を維持したりするための優れた方法でした。その一部は外部ライブラリに依存しており、これにはいくつかの解決策がありましたが、どれも正しく感じられませんでした。

1 つの解決策は、外部ライブラリ全体をライブラリに含めることでした。引数は、外部ライブラリのバージョンを制御できるというものでしたが、これは大量のコードを追加し、醜く、pythonic とは感じません。

別の解決策はtry import、インポートが失敗した場合に印刷エラーが発生することでした。これはいい感じです、pep8 ですが、私たちのライブラリには多種多様なモジュールがあり、その一部が必要になることがよくありますが、別の部分は必要ありません。このソリューションでは、影響がない場合にエラーが表示されます。苦情がありました。

try:
    import zmq
    import simplejson
except:
    print "Install zmq and simplejson to use the LiveFeedSubscription()."

try importsクラスに入れることを提案しました__init__(上記の問題を解決します)が、pep8ではありません。また、依存関係がモジュールの上部にインポートされていないため、依存関係が何であるかを判断するのが難しくなります。

def __init__(self, msg_type='', msg_types=[], debug=False):
    try:
        import zmq
        import simplejson
    except:
        print "Install zmq and simplejson to use the LiveFeedSubscription()."

このような大きく異なるモジュールを含むライブラリに外部ライブラリを含めるための python のベスト プラクティスは何ですか?

4

2 に答える 2

5

setup.py代わりに、依存関係をリストする適切なインストール スクリプトを使用してください。Python Packaging User GuideSetuptools のドキュメントを参照してください。

またはなどのツールはeasy_install、必要に応じて依存関係もインストールします。pipzc.buildout

于 2013-02-13T15:05:27.800 に答える
2

pipがサポートする要件ファイルを使用できます。これは次のようになります。

zmq
simplejson==1.2.3

次に、要件をインストールします(上記がrequirements.txt使用されていると仮定します:

pip install -r requirements.txt
于 2013-02-13T15:08:02.267 に答える