2

他のpythonモジュールの配布に関する質問を調べました。私のニーズは少し異なります(私はそう思います!、私はpython初心者+です)

リモート マシンで実行する必要がある Python スクリプトがたくさんあります。ターゲット環境は次のようになります。

  • マシンには基本の python ランタイムがインストールされます
  • 私は SSH アカウントを持っています。ssh を使用してリモートでログインまたはコマンドを実行できます
  • ファイル (scp) をホームディレクトリにコピーできます
  • マシンに何かをインストールすることは許可されていません。マシンはインターネットにアクセスさえできないかもしれません
  • 私のスクリプトは、いくつかの「エキゾチックな」python モジュールを使用している可能性があります。ほとんどの場合、それらはターゲット マシンには存在しません。
  • 監査後、私のホーム ディレクトリはマシンから削除されます (痕跡は残りません)。

だから私がやりたいのは:

  • Pythonスクリプト+モジュールのディレクトリ構造をリモートマシンにコピーします(/home/audituser/scriptsなど)。モジュールは /home/audituser/scripts/pythhon_lib にコピーできます)
  • 次に、スクリプトを実行します (/home/audituser/scripts/myscript.py など)。このスクリプトは、「python_lib」サブディレクトリから使用されるすべてのモジュールを解決する必要があります。

これは可能ですか?またはこれを行うより良い方法はありますか?私が探しているのは、サードパーティのモジュールをスクリプトディレクトリに「再配置」することだと思います。

前もって感謝します!

4

2 に答える 2

3

リモートマシンは互いに同じですか? もしそうなら、リモート マシンと実質的に同じ開発マシンをセットアップできますか?

もしそうなら、virtualenvこれはほとんど自明です。virtualenv開発マシンに を作成し、 のvirtualenvコピーを使用しpipてサードパーティ モジュールをインストールし、その中にスクリプトをビルドしてから、その環境全体を各リモート マシンにコピーします。

潜在的に自明ではない3つのことがあります。

  • リモート マシンがインストールされていない (virtualenvインストールできない) 場合は、次のいずれかを実行する必要があります。
    • 多くの場合、--relocatable環境をコピーするだけでうまくいきます。「Making Environments Relocatable」のドキュメント セクションを参照してください。
    • あなたはいつでも自分自身をバンドルすることができvirtualenvます. これにより、ユーザー アカウントは永続的に変更された状態のままになります。(しかし、幸いなことに、あなたのユーザー アカウントは核攻撃を受けるので、誰が気にしますか?)pip install --user virtualenvpip
    • 独自の手動ブートストラップを作成できます。「独自のブートストラップ スクリプトの作成」のセクションを参照してください。
    • デフォルトでは、Python 実行可能ファイル、標準ライブラリなど、必要以上に多くのものを取得します。
    • マシンが同一でない場合、これは機能しないか、少なくともそれほど効率的ではない可能性があります。
    • たとえそうであっても、バンドルを桁違いに大きくしていることがよくあります。
    • bin/python、--system-site-packages、および場合によってはブートストラップを使用しない Virtualenv の使用に関するドキュメント セクションを参照してください。
  • インストールしている Python モジュールのいずれかが C ライブラリも必要とする場合 (たとえばlibxml2for などlxml)、virtualenvそれは役に立ちません。実際、C ライブラリがほぼ同じ (同じパス、互換性のあるバージョン) である必要があります。

他の 3 つの選択肢:

  • 必要なものが十分に単純な場合 (または、最も単純でない部分にvirtualenv、インストールなどの役に立たないものが含まれlibxml2ている場合)、サードパーティ モジュールの .egg/.tgz/whatever ファイルをバンドルして、次のように記述する方が簡単な場合があります。それぞれに対してa などを実行するスクリプトで、pip install --user完了です。
  • 完全なアプリ配布システムが必要ないからといって、それを使用できないわけではありません。py2apppy2execx_freezeなどはそれほど複雑ではなく、特に単純なケースでは、コピーするためのクリックアンドゴー実行可能ファイルを用意することは、明示的な環境を用意するよりもさらに簡単です
  • zc.buildoutは驚くほど柔軟で管理しやすいツールで、3 つの選択肢のいずれかと同等の機能を備えています。主な欠点は、学習曲線がはるかに急勾配であることです。
于 2012-12-28T00:11:24.707 に答える
2

virtualenvを使用して、プロジェクトの自己完結型環境を作成できます。これには、独自のスクリプトと依存ライブラリを格納できます。次に、env を再配置可能 ( --relocatable) にして、ターゲット マシンに同期し、アクティブ化し、スクリプトを実行します。

これらのマシンがネットワーク アクセス (インターネットではなく、ローカル ネットワークのみ) を持っている場合、virtualenv を共有の場所に配置して、そこからアクティブ化することもできます。

次のようになります。

virtualenv --no-site-packages portable_proj
cd portable_proj/
source bin/activate
# install some deps
pip install xyz
virtualenv --relocatable .

portable_proj他のマシンに分散できるようになりました。

于 2012-12-28T00:06:11.070 に答える