13

virtualenv全体、または実行時の依存関係を含む正確なバージョンのPythonホイールの束を配布したいと思います。次に例を示します。

  • パイカール
    • pycurl.so
      • libcurl.so
        • libz.so
        • libssl.so
        • libcrypto.so
        • libgssapi_krb5.so
          • libkrb5.so
            • libresolv.so

システムに libssl.so がインストールされていることを信頼できると思いますが、確かに正しいバージョンの libcurl.so ではなく、おそらく Kerberos ではありません。

1 つのライブラリをすべてのランタイム依存関係と共にホイールにパッケージ化する最も簡単な方法は何ですか?

それとも、ばかげた用事で、virtualenv全体をパッケージ化する必要がありますか? それを確実に行う方法は?

オンザフライでの PS コンパイルはオプションではありません。一部のモジュールにはパッチが適用されます。

4

2 に答える 2

13

私の知る限り、パッケージに依存関係を移植可能にインストールする標準的な方法はありません。Continuum には、解決策として conda を支持する人が少なくともいます。残念ながら、これらの依存関係の一部については、自分で conda パッケージを作成する必要がある場合があります。

移植性がなくても問題ない場合は、ターゲット マシンのパッケージ マネージャーをターゲットにすることで明らかに機能します。それ以外の場合、ポータブル パッケージ マネージャーの場合、私が知っている唯一のオプションは conda です。

あるいは、あなたの投稿 (「オンザフライでのコンパイルはオプションではありません」) から、移植性は問題にならないように思えます。その場合、すべての要件をプレフィックス ディレクトリにインストールすることもできます (ほとんどのインストーラーはオプションをサポートしconfigure --prefix=/some/dir/ます)。単一のアーキテクチャが保証されている場合は、おそらく、すべての依存関係を単一のディレクトリにプレフィックスインストールし、それをファイルのように渡すことができます。conda のアプローチはおそらくよりクリーンですが、私はプレフィックスのインストールをかなり使用しており、それらは最も簡単な解決策の 1 つになる傾向があります。

編集: condaに関しては、それは同時にパッケージマネージャーであり、「virtualenv」のような環境/ pythonインストールです。virtualenv は既存の python インストールの上に追加されますが、conda はインストール全体を引き継ぐため、すべての依存関係が確実に考慮されます。pip と比較すると、C/Cpp 拡張機能をコンパイルするだけでなく、一般化された非 Python 依存関係を追加するように設計されています。詳細については、次のように表示されます。

conda を目的に使用する方法については、ドキュメントでレシピの作成方法が説明されています。

Conda ビルド フレームワーク

パッケージのビルドにはレシピが必要です。レシピは、次のファイルを含むフラット ディレクトリです。

  • meta.yaml(メタデータファイル)
  • build.sh(bash を使用して実行される Unix ビルド スクリプト)
  • bld.bat (cmd を使用して実行される Windows ビルド スクリプト)
  • run_test.py(オプションの Python テスト ファイル)
  • ソースへのパッチ (オプション、以下を参照)
  • ソースに含まれておらず、ビルド スクリプトで生成できないその他のリソース。

すべてのプラットフォームでパッケージをビルドするには、同じレシピを使用する必要があります。

パッケージをビルドすると、次の手順が呼び出されます。

  1. メタデータを読む
  2. ソースを(キャッシュに)ダウンロードする
  3. ソースディレクトリにソースを抽出します
  4. パッチを適用する
  5. ビルド環境を作成します(ビルドの依存関係はここにインストールされます)
  6. 実際のビルド スクリプトを実行します。現在の作業ディレクトリは、環境変数が設定されたソース ディレクトリです。ビルド スクリプトがビルド環境にインストールされます
  7. 必要な後処理手順を実行します: シバン、rpath など。
  8. ビルド環境に conda メタデータを追加する
  9. ビルド環境の新しいファイルを conda パッケージにパッケージ化する
  10. 新しい conda パッケージをテストします。
    • パッケージ (およびその依存関係) を使用してテスト環境を作成する
    • テスト スクリプトを実行する

_ リポジトリには、多くの conda パッケージのサンプル レシピがありますconda-recipes <https://github.com/continuumio/conda-recipes>

:ref:conda skeleton <skeleton_ref>コマンドは、PyPI <https://pypi.python.org/pypi>_.

次に、クライアントとして、pip からインストールする場合と同様にパッケージをインストールします。

最後に、dockerも興味深いかもしれませんが、Python であまり使用されていません。

于 2014-10-01T14:15:12.063 に答える