19

これは、仮想環境をアクティブにして を実行しても解決できない問題を引き起こしているわけではありませんpip install -U pipが、古いバージョンの pip はどこから来たのかいつも疑問に思っています。

OS X 10.7.5 を使用しています。pyvenv-3.4 myenvまたはを使用して仮想環境を作成すると、仮想環境python3 -m venv myenv内にインストールされている pip のバージョンは 6.0.8 ですが、グローバル pip を 6.1.1 にアップグレードしました。

これは、私が何を意味するかを示す端末セッションです。

$ python3 -m venv myenv
$ myenv/bin/pip -V
pip 6.0.8 from /Users/dust/Desktop/myenv/lib/python3.4/site-packages (python 3.4)

これが私が発生したいことです:

$ source myenv/bin/activate
(myenv)$ pip -V
UPDATED SYSTEM VERSION HERE WOULD BE NICE

仮想環境内で作成されたもの以外に、pip 6.0.8 が見つかりません。

これを試して理解するために使用したさまざまなコマンドの出力を次に示します。

$ which pip
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip

$ which pip3
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip3

$ pip -V
pip 6.1.1 from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages (python 3.4)

$ pip3 -V
pip 6.1.1 from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages (python 3.4)

私もfindを使ってみました:

$ find / -type f -name pip 2>&1 | awk '! /^f.*$/'
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip
/usr/local/bin/pip

$ find / -type f -name pip3 2>&1 | awk '! /^f.*$/'
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip3

/usr/local/bin/pipたぶん犯人だったのではないかと思いましたが、違います:

$ /usr/local/bin/pip -V
pip 6.1.1 from /Library/Python/2.7/site-packages/pip-6.1.1-py2.7.egg (python 2.7)

うーん。おそらくOS X pythonにはそれがありますか?

$ /usr/bin/python
>>> import pip
>>> pip.__version__
'6.1.1'

6.1.1 は、OS X の 2.7.1、python.org の 2.7.9、または python.org の 3.4.3 など、どの python ディストリビューションに問い合わせても報告されます。

仮想環境に配置される pip のバージョンを更新することは可能ですか (または推奨されますか)?

4

3 に答える 3

8

OSX 10.10.2実行中と同じ問題に直面していpython 3.4.2ます。ごく最近、使用可能なバージョンよりも古いバージョンのdebian wheezyマシンで仮想環境を作成しました。アップグレードする必要がありました。python 3.4.3pippip

私はpip仮想環境内で6.1.1から6.0.8に手動でアップグレードしてきました。これは、ソフトウェア ライブラリのバージョンにそのように慣れていないためです。はい、現在python 3バージョンをにアップグレードして3.4.3います。とにかく、私のシステムpython3-pipは最新バージョン6.1.1なので、なぜpyvenv新しい仮想環境を作成して古いバージョンをロードするのか疑問に思っていましたpip

アップグレードにより、どの仮想環境でも悪いことが起こったことに気づいていませんpip(しかし、逆に言えば、良いことにも気づいていません)明らかに、新しい pip の方が高速です -- 気付かなかったし、出力も少なくなりましたユーザーが気にしないため、成功したインストールのジャンク -- おそらく私が気にしない人の1人であるため、気付かなかったし、ラテアートができる最先端のコーヒーマシンも付属していますブート!!!-- まだ終了を待っていますsudo pip install latte:(

したがって、あなたの質問に答えるために、アップグレードすることは間違いなく可能であり、おそらくアップグレードすることをお勧めしますpip.多くの人 (古い の使用法でバグに直面したことはありませんpip)。

次のように、新しい仮想環境を作成するときに、フラグ --system-site-packages を使用してシステム サイト パッケージにリンクできます。

pyvenv myenv --system-site-packages

これにより、システム全体のバージョンの pip にリンクされ、すべての仮想環境で pip を手動でアップグレードする煩わしさが解消されますが、これを行うと、仮想環境はすべて仮想化されますか?

更新:上記の暴言に続いて、venvパッケージのソースを掘り下げました。ファイルでpip呼び出されたメソッドによって設定されます、行 248_setup_pip__init__.py

def _setup_pip(self, context):
        """Installs or upgrades pip in a virtual environment"""
        # We run ensurepip in isolated mode to avoid side effects from
        # environment vars, the current directory and anything else
        # intended for the global Python environment
        cmd = [context.env_exe, '-Im', 'ensurepip', '--upgrade',
                                                    '--default-pip']
        subprocess.check_output(cmd, stderr=subprocess.STDOUT)

ということで、venvはモジュールensurepipを使ってシェルから呼び出しているようです。subprocess

もう 1 分間 google-fu を実行すると、 ensurepip のドキュメントからこれが得られました。

ensurepip.version()

環境のブートストラップ時にインストールされる pip のバンドル バージョンを指定する文字列を返します。

したがって、コマンド ラインから、次のコードを実行します。

$ python3 -c 'import ensurepip; print(ensurepip.version())' 
6.0.8

pipでブートストラップされる私の電流を表示しますensurepip

付属のpipのバージョンをアップグレードする方法が見つからないため、アップグレードさpipれるまで、新しいインストールごとに古いバージョンに固執していると思いますensurepipensurepip

于 2015-04-17T03:26:22.073 に答える