Python作業環境を別のマシンにクローンする方法は?


26

ワークステーションでPython(Anaconda + Flask)を使用して機械学習モデルを開発しましたが、すべてうまくいきます。後で、このプログラムを別のマシンに出荷しようとしましたが、もちろん同じ環境をセットアップしようとしましたが、プログラムは実行に失敗しました。プログラムを他のマシンにコピーし、そこでもスムーズに実行されるようにしました。

失敗した場合の問題を把握することはできません(プログラムコードとエラーメッセージの両方が豊富なので、ここでは説明できません)。 。

だから、私の質問は、特定のプログラムがうまく動作する環境を考えると、どうすればそれがうまく動作するはずの別のプログラムにクローンを作成できますか?もちろん、完全なシステムの複製なしで;)


conda env exportを使用します。
kbrose

回答:


39

まず第一に、これはPython / Anacondaの質問であり、おそらく別のスタック交換サブサイトで尋ねられるべきです。


質問自体については、次を使用してAnaconda環境をエクスポートできます。

conda env export > environment.yml

そして、次を使用して再作成します。

conda env create -f environment.yml

他の人が示唆したように、仮想環境を使用する必要があります。仮想環境を使用すると、マシンの環境とは別の特定の環境を作成し、より簡単に管理できることに注意してください。

Anacondaで仮想環境を作成するには、次を使用できます。

conda create -n yourenvname python=x.x anaconda

以下を使用してアクティベートします。

source activate yourenvname

Anacondaのドキュメントは、使用するconda createかどうかconda env create、または環境を共有/再作成するときにあまり明確ではありません。conda env createこの状況での使用を推奨する理由をさらに詳しく教えてください。
タンガイ

conda createとの違いについては、groups.google.comconda env create / a / continuum.io / forum / #!topic / conda / …のメモをご覧ください。 そうは言っても、通常は同じ意味で使用できます。
-ginge

1
私はこのスレッドを見ましたが、各オプション(conda createvs conda env create)がどの状況で優先されるべきか、それぞれの欠点は何であるかを正確に理解しようとしています(例えば:conda env createpipを使用するパッケージがインストールされている環境、追加の複雑さを引き起こす」:どのような追加の複雑さを追加しますか?)。
タンガイ

conda env create -f environment.ymlymlファイルのvirtenvの名前がす​​でに使用されているため、実行時にエラーが発生することを確認したいと思います。克服するには、名前を新しいvirtenvに変更します。
ジャングエン

この方法はあなたの命を救います!Anacondaの「環境の管理」ページの指示に基づいてファイルから環境を作成する場合、別のプラットフォームを使用していると機能しません。conda list --explicit > FILE_NAME現在のプラットフォームのバイナリをエクスポートし、別のプラットフォームで動作していないようです。
シャヤンアマニ

5

仮想化のより軽量な代替手段であるDocker(https://www.docker.com/what-c​​ontainer)などの「コンテナー」を調べてください

ある程度の時間を費やす必要がありますが、最終的には多くの利点が得られます。

特定のニーズを太字の斜体でマークしたリンクから:

開発、出荷、展開のためにソフトウェアを標準化されたユニットにパッケージ化する

コンテナイメージは、コード、ランタイム、システムツール、システムライブラリ、設定など、実行に必要なすべてを含むソフトウェアの軽量でスタンドアロンの実行可能パッケージです。コンテナ化されたソフトウェアは、LinuxベースのアプリとWindowsベースのアプリの両方で使用でき、環境に関係なく常に同じように実行されます。コンテナは、開発環境とステージング環境の違いなど、ソフトウェアを周囲から隔離し、同じインフラストラクチャで異なるソフトウェアを実行しているチーム間の競合を減らすのに役立ちます。


5

以下を使用して、現在のconda環境の最初の環境設定をエクスポートします。

conda-env  export -n your_env_name > your_env_name.yml

例:

conda-env  export -n base> base.yml

上記のコマンドを実行すると、conda環境の情報を含む現在のディレクトリのyml設定ファイルになります

yml構成ファイルを使用して新しい環境を作成するには、次を実行します。

conda-env create -n new_env -f=\path\to\base.yml 

例:

conda-env create -n venv -f=base.yml

上記のものが機能しない場合(conda自体のさまざまな問題のため)、次のバリエーションを試してみる価値があります。

conda-env create --name new_env --file \path\to\base.yml 

4

プログラムの大部分がPythonである場合、仮想環境のみに依存できます。

システムライブラリを使用するのではなく、仮想環境を作成して依存関係を分離します。次に、仮想環境ツールを使用して環境を複製します。

動作するvirtualenvで、インストールされている各Pythonライブラリのバージョンを使用してファイルを作成します。

pip freeze > requirements.txt

新しいvirtualenv pipで、同じバージョンのライブラリをインストールするように依頼します:

pip install -r requirements.txt

これにより、両方のマシンで同じlibバージョンを確実に取得できます。また、requirements.txtはVCSによって追跡されるため、コードの古いバージョンの環境をいつでも再作成できます。

もちろん、データベース、実稼働Webサーバーなどが必要な場合は、さらにいくつかの手順が必要になり、virtualenvに依存して両方の環境を一致させることはできません。これは、Dockerが介入する場所です(Pieter21の回答を参照)。


anacondaあなたの質問のタグに気がつきませんでした。私はこれを経験していませんが、注意してください。anacondaには環境を管理し、anacondaの両方を使用する独自の方法があり、virtualenvトラブルに巻き込まれる可能性があると思います。ただし、anacondaは同等の機能を提供するはずです。
ジェローム

1

このドキュメントページの最後から:

将来の使用のためにパッケージを保存します。

conda list --export > package-list.txt

エクスポートファイルからパッケージを再インストールします。

conda create -n myenv --file package-list.txt

1

別の方法に基づいて環境を作成する既存の方法のまとめ:

  • 環境の複製

    • 既存の環境から:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • 同じマシン上のエクスポートされた環境ファイルから:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • 別のマシン上のエクスポートされた環境ファイルから:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```
      

$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B.日

0

ワンライナー

conda create --clone source_env --name destination_env

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.