virtualenvを複製する方法


130

多くのパッケージを含む既存のvirtualenvがありますが、古いバージョンのDjangoがあります。

私がやりたいのは、この環境を複製することです。そのため、まったく同じパッケージを使用している、Djangoのバージョンが新しい別の環境があります。これどうやってするの?


3
私はすべての要件を「requirements.txt」ファイルにpipフリーズし、別のvirtualenvを作成して、pip install requirements.txtを実行します
Calvin Cheng

コピーする仮想環境のpythonバージョンがデフォルトのpython環境と異なる場合は、新しい環境をとしてセットアップしvirtualenv -p /path/to/older/venv/bin/python new_venv、その後requirements.txt生成した環境を使用できますpip freeze
GiriB

回答:


183

最も簡単な方法は、pipを使用して要件ファイルを生成することです。要件ファイルは、基本的に、インストールするすべてのpythonパッケージ(またはpipで生成されたファイルの場合はすでにインストール済み)のリストとそれらのバージョンのバージョンを含むファイルです。

要件ファイルを生成するには、元のvirtualenvに移動して、次を実行します。

pip freeze > requirements.txt

これにより、requirements.txtファイルが生成されます。そのファイルをお好きなテキストエディタで開くと、次のように表示されます。

Django==1.3
Fabric==1.0.1
etc...

さて、編集という行Django==x.xと言ってDjango==1.3(または任意のバージョン、あなたの新しいvirtualenvの中にインストールしたいです)。

最後に、新しい virtualenvをアクティブにして実行します。

pip install -r requirements.txt

そして、pipは、requirements.txtファイルにリストされているすべてのpythonモジュールを、指定したバージョンで自動的にダウンロードしてインストールします。


3
ありがとうございました!グーグルで調べていると、非常にノイズの多い、乱雑で混乱したページがたくさん見つかりました...あなたの解決策はとてもクリーンでシンプルです...それは私の日を作りました;)
dolma33

フォルダをコピーして別のマシンに貼り付けるとどうなりますか?それはうまくいくでしょうか?もちろん、apt-getの依存関係が解決されたと想定
TalesPáduaMar

確かにそれは私が今見つけているので、そうではありません。
horcle_buzz 16

多くのメッセージが表示されCould not find a version that satisfies the requirement a_package=#.#.#ます簡単に解決できますか?行を削除するか、等式を不等式に変更しました。
世界を変える

以下のために働くpyenvだけでなく、。素晴らしい答え。
レナード

29

別のオプションは、virtualenv-cloneパッケージを使用することです:

再配置不可能なvirtualenvを複製するためのスクリプト。


こんにちは。これにより、Python環境全体をファイルにコピーできると思いますか。次に、このファイルを新しいコンピューター/ OSにロードするだけで、すべてのサイトパッケージが再インストールされます
aceminer

2
"virtualenv-clone source / target /"は魅力的なように動作しました!
ajankuv

virtualenv-clonevirtualenvをアクティブ化した後にインストールしたことを確認してください
4givN

15

virtualenvwrappervirtualenvを複製するコマンドを提供します

cpvirtualenv ENVNAME [TARGETENVNAME]

7
あまり良い考えではありません。「仮想環境のコピーは十分にサポートされていません。各virtualenvにはハードコーディングされたパス情報があり、コピーコードが特定のファイルを更新する必要があることを知らない場合があります。注意して使用してください。」
Temak

5

Anacondaを使用している場合は、次のように実行できます。

conda create --name myclone --clone myenv

これはmyenv、新しく作成されたと呼ばれる環境にコピーされますmyclone


4

最も簡単なオプションは、virtualenv-cloneパッケージを使用することです。

に複製venv1するにはvenv2、次の手順に従います。

  1. またはダミーの仮想環境にインストールvirtualenv-clonevenv1ますvenv_dummy。作成するにはvenv_dummy

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. インストールするにはvirtualenv-clone

    (venv_dummy): pip install virtualenv-clone
  3. 複製venv1するにはvenv2

    (venv_dummy): virtualenv-clone venv1/ venv2/

bashのプロンプトは変更ではなく、bin / activateを編集する必要があり、方法を100%明確にしない
MrR

@MrR .. bin/activateこの回答に従えば、編集する必要はありません。なぜ編集しなければならないのですbin/activateか?
Safwan

クローンを作成した後、bashのプロンプトには元の環境名が含まれていました。これは、PS1セクションが含まれているためですbin/activate
MrR

1

単純にできませんか:

  • 既存の仮想環境ディレクトリを新しいディレクトリにコピーします
  • 新しいDjangoに更新しますか?

7
時々私はこのアプローチを使用しますが、bin / activateスクリプト内のいくつかのパスを更新しなければならないという不便があります。
アルマンドペレスマルケス'16

3
変更は、env名への参照の単純な検索と置換ですか、それともそれよりも複雑ですか?
グレッグ、

1
私の場合、bin / activateのVIRTUAL_ENV定数のパスを更新するだけでうまくいきました
bryanph

1
一方で、bin / activateを変更することは非常にハックであり、これが何かで何かを壊すことができるかどうか疑問に思わなければなりません。特に、仮想環境が本番環境で使用されている場合。
ハーバート

2
それは多くのことを壊します。virtualenvを再作成または複製する方が簡単です。私はこれだけを実行しようとしましたが(プロキシサーバーが開くのを待っている間、必要なすべてのパッケージを再インストールして最初から開始できるようにしています)、それは機能していません!私は賢いと思っていましたが、悲しいかな、これを稼働させるには多くのハッキングが必要です。正直なところ、もっと良いことはたくさんあります。
horcle_buzz 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.