pythonモジュールを1つのvirtualenvから別のvirtualenvにコピーすることは可能ですか?もしそうなら、これはどのように行われますか?
sameマシンでそれらをあるvirtualenvから別のvirtualenvに移動している限り、簡単に行うことができます:
$ cp -r [env1]/lib/pythonX.X/site-packages/* [env2]/lib/pythonX.X/site-packages/
ただし、環境が異なるマシン上にある場合、またはpythonまたは他の大きな違いのバージョン)を使用している場合は、おそらく良い考えではありません。一般に、requirements.txt
を生成する方がはるかに安全です。 、次にそれを使用して他の環境で同じモジュールをすべてロードします。必要に応じてファイルを手動で作成できますが、pip
を使用する方が簡単です。
$ pip freeze -E [env1] > requirements.txt
または、virtualenvがすでにアクティブ化されている場合は、次のように簡単に実行できます。
$ pip freeze > requirements.txt
次に、他の環境では、次のことができます。
$ pip install -E [env2] -r /path/to/requirements.txt
Ubuntu-14.04-64を搭載した64ビットマシンで作業しています。私はpython-3.4.3をコンパイルして/ opt/python3.4 /にインストールし、このpythonに基づいてvitualenvを作成しました。
mkvirtualenv -p /opt/python3.4/bin/python venv1
また、簡単に:
Sudo apt-get install virtualenvwrapper
Venvがインストールされ、PyQt5(ハードビット)に加えて、numpy、scipy、ipythonなどが正常に動作している状態で、virtualenv-cloneをインストールしました。
workon myvenv
pip install virtual-clone
deactivate
そして実行しました:
virtualenv-clone venv1 venv2
PyQt5はこのように動作します。コマンドラインプロンプトではvenv1がアクティブとして指定されていますが、〜/ .virtualenv/venv2内にあります
cat activate* | grep "venv1"
3つのファイル内の3つのエントリを示しますactivate、activate.csh、およびactivate.fish
アクティブ化、変更
if [ "x(myvenv1) " != x ] ; then
PS1="(myvenv1) $PS1"
else
に
...
PS1="(myvenv2) $PS1"
...
activate.cshの変更
if ("venv1" != "") then
set env_name = "venv1"
else
に
...
set env_name = "venv2"
...
activate.fishの変更
if test -n "(venv1) "
printf "%s%s%s" "(venv1) " (set_color normal) (_old_fish_Prompt)
return
end
に
...
printf "%s%s%s" "(venv2) " (set_color normal) (_old_fish_Prompt)
...
今あなたがsource ~/.virtualenv/venv2/bin/activate
またはworkon venv2
コマンドプロンプトは、環境(venv1の複製されたコピー)を正しく表示します。
編集:これは質問に答えません"モジュールを1つのvirtualenvから別のvirtualenvにコピーする方法"しかし、多くの場合、結果は望ましいもの、つまり新しいvenvの作成であると確信しています以前にインストールされたモジュール(すべて)を含む以前に作成されたモジュールに基づいています。
1つのvirtualenvを別のvirtualenvとして単にコピーすることはできないようです。 $ VIRTUAL_ENVをアクティブ化ファイルで変更しても、Origin virtualenvと同様に機能し、pipはすべてのパッケージをOrigin site-packages /にインストールします
通常、.env-infoをvirtualenvのlib/site-packagesフォルダーから他の環境のlib/site-packagesにコピーできます。