2016-08-08 9 views
1

私は作業中の多くのプロジェクトの環境を定義するのにを使用しました。私はvirtualenvのpythonをバージョン3.4と定義しました。最終的に私のグローバルなpythonは3.4.0から3.4.3にアップグレードされました。 virtualenvがグローバルバイナリに依存していたため(virtualenv内の/lib/python3.4の内容は、実際はグローバルバイナリへのリンクに過ぎません)、これらはマイナーバージョンまでは定義されていません。つまり、アップグレードが完了すると、バイナリフォルダ/usr/lib/python3.4の内容が置き換えられました。これは、Pythonでは3.4.0と3.4.3では個別にインストールされず、/usr/lib/python3.4という名前の単一のフォルダにのみインストールされるためです。 virtualenvのPython実行ファイルは3.4.0だったので、明らかに3.4.3バイナリとの互換性の問題がありました(​​の読み込みに失敗し、pythonの実行に依存することはありません)。私が見つけた唯一の修正点は、私のグローバルなPythonインストールをダウングレードすることですが、これは "汚い"と感じています。 1つのプロジェクトで3.4.0を実行し、別のプロジェクトで3.4.3を実行したらどうなりますか? 3.4.xインストールでバイナリフォルダが1つしか存在しない場合、同じマシン上でそれらを並行して動作させる方法はありませんか?私はvirtualenvを間違って使用していますか、これはそれの制限ですか?

virtualenvを使用したときにかなりの数の人がバイナーズの問題について不満を抱いていると聞いて、ここに明らかなものがないか、これが共通の問題であるかどうかを理解しようとしています。

将来、virtualenvwrapperにバイナリをリンクするのではなくコピーするようにと言っていますか?

+0

は、Python 3.4.3あなたのコードと互換性がないことの問題ですか、それは失敗ばかりvirtualenvの(再作成です:あなたはそれらを再作成し、その中にすべてのものを再インストールします(お使いのvirtualenvのルートでこれを実行)する必要がありますvirtualenvと内部のすべてを再インストールすると修正されます)? –

+0

問題は私のコードではありません。基本的なライブラリをロードしようとすると、仮想env内のPythonインタプリタをロードするだけでも失敗します。だから私のコードの詳細が画像に入る前に事態がうまくいかない。これは本当に、実行ファイルに間違ったバイナリがリンクされていることです。 – ticster

+0

新しいvirtualenvを作成し、そこにPython 3.4.3を実行するとどうなりますか? –

答えて

2

Virtualenvsは、マシン間でもPythonバージョンでもポータブルであるとは考えていませんでした。

これは、Pythonのバージョンをアップグレードすると、virtualenvが壊れることがあることを意味します。

# Save a list of what you had installed 
pip freeze > freeze.txt 

# Trash the entire virtualenv 
deactivate 
rm -rf lib/ bin/ share/ man/ include/ .Python pip-selfcheck.json 

# Create it anew 
virtualenv . 

# Install all libraries you had before 
pip install -r freeze.txt 
+0

"Pythonのバージョンをアップグレードすると、virtualenvsが壊れることがあります。これは私の質問に答える。私はアップグレードされたPythonを使って個々のvirtualenvを個別に再作成することができると認識していますが、最初はvirtualenvを使うという全目的を破るように思えます...しかし、実際にPythonをアップグレードするとvirutalenvが破損したようです私はこれがそれの厳しい制限だと私に言います。 – ticster

+1

Virtualenvsはマシン間でもPythonバージョン間でもポータブルであるとは考えていませんでした。これは既知の欠点ですが、その目的を破るものではありません。 –

+0

Gotcha。しかし、それはあなたがそれがローカルに静的なものを維持しながら、Pythonのバージョンでグローバルな変更を処理できるようになっていたことを意味する使用するPythonのバージョンを指定することが許可されて以来。私はそうではないと思うし、外部モジュールのバージョンを扱うことしかない。助けてくれてありがとう。あなたはあなたの答えにそのコメントを追加できますか?これは本当に私が求めていることの中心に達するからです。私は答えを受け入れることができます。 – ticster

関連する問題