Pip: Windowsのインプレースピップアップグレード

作成日 2013年11月05日  ·  89コメント  ·  ソース: pypa/pip

Windowsのpip install --ugrade pipのステータスがわからない。

PEP453にはこれが必要です

@pfmoore

これに関する古い議論については、#188を参照してください。

windows auto-locked bug

最も参考になるコメント

Windowsでは、管理者モードでコマンドプロンプトウィンドウを使用します。 次に、コマンドを入力します
python -m pip install --upgrade pip

私はそれがあなたのために働くことを願っています。 それが私がそれをウィンドウ10で動作させる方法です

幸運を。

全てのコメント89件

python -m pip install --upgrade pipます。 @vsajipは、exeラッパー内の何らかの魔法を考慮して、exeの自己置換を機能させることができると考えていたと思います。 しかし、私たちが使用しているバージョンのdistlibで彼が何かをしたかどうかはわかりません。 アプリケーション(pip)の助けなしにそれを実行できるかどうかは実際にはわかりません。 そして、このためにpipにコードが追加されていないことは間違いありません。

個人的には、これは小さな問題だと思います。この問題は、Windowsが開いているファイルの削除を処理する方法の基本であることを考えると、 `python -mpip``を使用するように指示することは完全に受け入れられる答えのようです。

最終的には、これを解決するためにどれだけの複雑さ(結果として生じる保守コストを伴う)とリスクを引き受けたいかという問題になります。

個人的には、 pip install --upgrade pip python -m pip install --upgrade pipを使用するようにメッセージを出力しても大丈夫です。 開いているファイルハンドルや例外が何であれ、エラーをスローするべきではないと思います。

私はちょうど同じことを言おうとしていました。

ここに質問があります-そのメッセージをWindowsでのみ表示したいのですか、それともUnixでも同じことを言うのが合理的ですか(一貫したユーザーエクスペリエンスのため)。 個人的には、プラットフォーム間で一貫性を保ちたいと思っています(そのように文書化する方が簡単だからです)。

また、pipを(再)インストールしようとするコマンドをトラップする必要があります。たとえば、 pip install -I pipは別のコマンドです。

個人的にはウィンドウズだけだと思います。 私はこれを、Windowsプラットフォームが機能する方法の回避策であり、将来的にはより良いもののために最終的に削除することを目標としていると考えています。

私はあなたがそれを言うつもりだったことを知っていました:-(

率直に言って、基本的には、Windowsの開発と保守に十分な専門知識がないため、「より良いもの」が得られるとは思いません。 私は、実行可能ファイルの満足のいく自己置換ソリューションを備えたWindowsソフトウェアを_no_知っています。 私には確かに答えがありませんし、Unixベースの開発者が助けてくれるとは思いません。 私たちが何かを得たとしても、それは複雑である可能性が高く、ビット腐敗やあいまいなバグの原因である可能性があります。

すべてのプラットフォームで機能するソリューションを作成することで、ユーザーに混乱を招くメッセージを送信しないようにするための「公式の回答」に思えます。 説明されているように警告を表示してバックアップすると、 pip install -U pipを機能させるほど完璧ではない場合でも、堅牢なソリューションが得られます。

この返信では、妥協する必要があるのは常にWindowsプラットフォームであるという感覚に起因する、ある程度の軽度の不機嫌を許してください。これで問題を解決するつもりはありません。 実際には、コンセンサスが何であれ、私は行きます。 大したことではないと思います。

FWIW PEP453が完了した後の私の目標は、Windowsを含む独自のテストインフラストラクチャを立ち上げることです。これにより、Windowsのビットロットの問題のいくつかが解決されることを願っています。

不機嫌さは理解できますが:)このシステムを真新しく設計した場合、私はそれをはるかに修正できると思いますが、Windows以外のすべてのpip install -U pipを壊して、ユーザーフレンドリーではないと思います。一貫性を維持します。 これがまったく新しいものだった場合、ユーザーの期待はありません(または少なくとも):]

OK、それは公平に聞こえます。 ここでは、過去の使用法がより重要であることは間違いありません。

私は実際、Unixでのユーザーエクスペリエンスが何であるかをまったく感じていないので、おそらく他の人と同じように一方的な考え方に罪を犯しています。 LinuxでPythonを使用することがどのように感じられるかを確認する必要があります-Python(3)環境のセットアップ方法、さまざまなツールのセットアップ方法などを示す優れた「初心者向けPython on Linux」リソースはありますか? [私がいつも見つけていることの1つは、「python」にデフォルトでPython 3を実行させる方法、「virtualenv」にデフォルトでPython 3 virtualenvsをビルドさせる方法、そのようなことすべてです-Pythonは私には思えます奇妙なことに、3はWindowsよりもUnixの方がはるかにセカンドクラスです。]

通常、システムはPythonを使用し、すべてのライブラリがPython3に移植されるわけではないため、 pythonが* nix上のpython3を指すようにする必要はありません。 ただし、現在Python3がデフォルトになっているLinuxディストリビューションがいくつかあります... Archだと思いますか? そして多分次のFedora?

うーん、私はシステムレベルで話しているわけではありませんが、実際には、個人アカウントでPythonに何を使用するかを選択することはできませんか? それは間違いなくPython3を私の考え方では二流にします...しかし、Unixユーザーが「pip3」や「pip3.3」のようなものをsinほど醜いものとして使用していないように見える理由を説明しています:-)

(とにかく、ここではトピックから外れているので、気にしないでください)。

システムbinの前に〜/ bin /が含まれるようにシェルをセットアップし、そこにpythonからpython3へのシンボリックリンクを追加できますが、そうです。 あなたが実際に物事をセットアップすることに興味があるなら、私は喜んで助けます:] IRCまたはEメール。

Paulが言及していると私が信じている私の仕事は、使用中のファイル(つまり、exeラッパー)を置き換えるための「deleteme」ダンスを実装することdistlibこれは、.exeラッパーではなく、 distlib.scriptsモジュールにあり、そのモジュールを使用してスクリプトを作成するときはいつでも実行する必要があります。

それで、おそらくこれはWheelsですでに解決されていますか? それ以外の場合、setuptoolsの問題ですか?

可能だと思います。 できれば、今日はいくつかのテストを行います。

残念ながら、少なくとも「pip install-Ipip」ではそうではありません。 (pipの最新バージョンのみがスクリプトラッパーをサポートしているため、実際のアップグレードをテストするのは困難です):

>pip install -f $x -I pip --use-wheel --no-index --pre
Ignoring indexes: https://pypi.python.org/simple/
Downloading/unpacking pip
Installing collected packages: pip
  Found existing installation: pip 1.5.dev1
    Uninstalling pip:
      Successfully uninstalled pip
Cleaning up...
Exception:
Traceback (most recent call last):
  File "C:\Work\Scratch\xxyy\lib\shutil.py", line 365, in _rmtree_unsafe
    os.unlink(fullname)
PermissionError: [WinError 5] Access is denied: 'c:\\users\\uk03306\\appdata\\local\\temp\\pip-zhbsiy-uninstall\\work\\scratch\\xxyy\\scripts\\pip.exe'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Work\Scratch\xxyy\lib\site-packages\pip\basecommand.py", line 121, in main
    status = self.run(options, args)
  File "C:\Work\Scratch\xxyy\lib\site-packages\pip\commands\install.py", line 258, in run
    requirement_set.install(install_options, global_options, root=options.root_path)
  File "C:\Work\Scratch\xxyy\lib\site-packages\pip\req.py", line 1330, in install
    requirement.commit_uninstall()
  File "C:\Work\Scratch\xxyy\lib\site-packages\pip\req.py", line 557, in commit_uninstall
    self.uninstalled.commit()
  File "C:\Work\Scratch\xxyy\lib\site-packages\pip\req.py", line 1743, in commit
    rmtree(self.save_dir)
  File "C:\Work\Scratch\xxyy\lib\site-packages\pip\util.py", line 42, in rmtree
    onerror=rmtree_errorhandler)
  File "C:\Work\Scratch\xxyy\lib\shutil.py", line 460, in rmtree
    return _rmtree_unsafe(path, onerror)
  File "C:\Work\Scratch\xxyy\lib\shutil.py", line 362, in _rmtree_unsafe
    _rmtree_unsafe(fullname, onerror)
  File "C:\Work\Scratch\xxyy\lib\shutil.py", line 362, in _rmtree_unsafe
    _rmtree_unsafe(fullname, onerror)
  File "C:\Work\Scratch\xxyy\lib\shutil.py", line 362, in _rmtree_unsafe
    _rmtree_unsafe(fullname, onerror)
  File "C:\Work\Scratch\xxyy\lib\shutil.py", line 362, in _rmtree_unsafe
    _rmtree_unsafe(fullname, onerror)
  File "C:\Work\Scratch\xxyy\lib\shutil.py", line 367, in _rmtree_unsafe
    onerror(os.unlink, fullname, sys.exc_info())
  File "C:\Work\Scratch\xxyy\lib\site-packages\pip\util.py", line 61, in rmtree_errorhandler
    func(path)
PermissionError: [WinError 5] Access is denied: 'c:\\users\\uk03306\\appdata\\local\\temp\\pip-zhbsiy-uninstall\\work\\scratch\\xxyy\\scripts\\pip.exe'

Storing complete log in C:\Users\uk03306\pip\pip.log

したがって、 pipスクリプトのインストールにdistlib.scriptsを使用していません... pipワークフローには適合しないと思います。

インストールがそこにあるものを上書きするのではなく、アンインストールしてからインストールするためだと思います(明らかな理由で)。

Windowsでは、開いているexeファイルを上書きまたは削除することはできませんが、名前を変更したり移動したりすることはできます。

さて、Win32 APIを使ったいくつかの不正行為により、Sysinternalのプロセスエクスプローラーを使用する場合と同じように、ハンドルをpip.exe閉じることができます。

現在実行中のexeファイルのすべてのハンドルを閉じることができるとは思いません。 しかし、例として機能するコードがある場合は、それを見てみたいと思います。これは長い間人々が議論してきた問題であり、「名前を変更して後で削除する」などのトリックを除いて、常に不可能であるというコンセンサスがあります。 )。 これを行う作業コードは、コミュニティにとって非常に役立ちます。

同じ問題が発生します。

簡単なハックとして、pip.exeは実行前にアップグレードされていることを検出し、 python -m pip {{ sys.argv }}再起動できますか?

私はそれが実際に機能するとは思わない。

しかし、おそらく愚かな考えです。.exeを更新する必要はありません。特別な場合のpip.exeをそのままにしておくことはできますか? ただし、インストール後にpip.exeを置いたままにする可能性があります。

@dstufft正解、「自分で再起動する」は、 @ techtonikがWindowsで鳴らすほど簡単ではありません。Windowsでは、Unixのexec呼び出しに相当するものはありません。

技術的にpip.exe 、エントリポイントが変更された場合、またはdistlibラッパーコードが変更された場合、 pip.exeを一時的な場所に書き込んで、現在の場所と同じである場合はスキップすることも可能です。 更新が必要な場合はエラーを回避できませんが、更新が必要でない場合の99%の場合は、問題ありません。

ところで、ここでは円を描いて回っています。 Vinayの以前のコメントによると、これはdistlib(解決すべきだと思う場所)で解決されますが、pipはAPIを機能させる方法で使用しません。 distlibソリューションを使用できれば、すばらしいです。 それ以外の場合は、ピップ固有のソリューションを作成する人が必要です(そして、問題が保証するよりもはるかに複雑ではない、堅牢で保守可能な方法でこれを実行できるかどうかについては懐疑的です)。

提案:

  1. 誰かがhttp://www.pip-installer.org/en/latest/installing.html#install-or-upgrade-pipのpipドキュメントにセクションを追加し、Windowsではpython -m pip回避策が必要であることを指摘しましたpipをそれ自体でアップグレードする場合。 いつかこれを行う機会があるかもしれませんが、この問題に貢献してくれた人々からのPRはありがたいことに受け入れられます:-)。
  2. 誰かが実行可能な解決策を持っていて、それを実装する準備ができている場合、彼らはPRを上げる必要があり、提案されたアプローチではなく実際のコードを確認できます。

この問題を前進させるのは、実際に機能するコードだけである段階にあると思います。

私は他の解決策を試さずにドキュメントを肥大化させることに-1です。

私は今何が機能するかを文書化することに+1しています。

ドキュメントコメントがあっても、それはまだ回避策であり、解決策ではなく、Windowsのコマンドプロンプトが間違っています。

多分これはクレイジーですが、私はいつもこれをします:

$ curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

もちろん、これにはlibcurlが必要ですが、ここで利用可能なWindowsバイナリがあり

Macにインストールしようとしましたが、これを受け取りました

Alexs-MacBook- Air:Pipmodules aleand $ pip install -U pip
-bash:pip:コマンドが見つかりません
Alexs-MacBook- Air:Pipmodules aleand $ python get-pip.py
ピップのダウンロード/解凍
pip-1.5.5-py2.py3-none-any.whl(1.2MB)のダウンロード:1.2MBをダウンロード
収集したパッケージのインストール:pip
清掃...
例外:
トレースバック(最後の最後の呼び出し):
ファイル "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/basecommand.py"、行122、メイン
status = self.run(options、args)
ファイル "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/commands/install.py"、行283、実行中
require_set.install(install_options、global_options、root = options.root_path)
ファイル "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py"、行1435、インストール中
require.install(install_options、global_options、_args、* _kwargs)
ファイル "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py"、671行目、インストール中
self.move_wheel_files(self.source_dir、root = root)
ファイル "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py"、行901、move_wheel_files
pycompile = self.pycompile、
ファイル「/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/wheel.py」、215行目、move_wheel_files
clobber(source、lib_dir、True)
ファイル "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/wheel.py"、205行目、クローバー
os.makedirs(destdir)
ファイル "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py"、157行目、makedirs
mkdir(名前、モード)
OSError:[Errno 13]アクセスが拒否されました: '/ Library / Python / 2.7 / site-packages / pip'

失敗のデバッグログを/Users/aleand/Library/Logs/pip.logに保存します

@zaducu 、あなたのトレースバックから、MacにプリインストールされているPythonのバージョンにあるpipバージョンを更新しようとしていることがsudoを使用して資格情報を昇格させる必要があります:

$ sudo curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

sudoを使用するには、 /etc/sudousers自分を追加する必要がある場合があります。 グーグルそれとあなたはこれを行う方法を示す多数のリンクを見つけるでしょう。

Macは賢く、 /System/Frameworks/Python.framework site-pacakgesフォルダを壊す代わりに、パッケージを/Library/Pythonに保持します。 わーい! ただし、このフォルダにアクセスするには、root権限を持つ管理者である必要があります。したがって、 sudoです。

考慮すべき代替策は、 virtualenvおよび/または.localフォルダーを使用して、個人のパッケージとモジュールを分離しておくことです。 パッケージをローカルフォルダにインストールするには、 pip代わりにdistutils使用し、 Pythonモジュールのインストールに関する指示に従い

プリインストールされたPythonを使用する他の方法は、公式のPython自作、MacPorts、Finkを使用するか、自分でビルドすることです。

公式Pythonの場合は、引き続きsudoが必要ですが、ほとんどのアイテムは/System/Frameworksではなく/System/Library/Frameworks /System/Frameworksインストールされます。Homebrewの場合、 sudoは必要ありません。 MacPortsやFinkについて話すことはできません。

1.5.4から6.0.8にアップグレードしても、Windowsでも同じ問題が発生します。

E:\ Distribution \ Programming> pip install -U pip
https://pypi.python.org/packages/py2.py3/p/pip/pip-6.0.8-py2.py3-none-any.whl#md5 = 41e73fae2c86ba2270ff51c1d86からpipをダウンロード/解凍
f7e09
収集したパッケージのインストール:pip
既存のインストールが見つかりました:pip 1.5.4
pipのアンインストール:
pipが正常にアンインストールされました
清掃...
例外:
トレースバック(最後の最後の呼び出し):
_rmtree_unsafeのファイル "C:\ Python \ 3.3-32 \ lib \ shutil.py"、行371
os.unlink(フルネーム)
PermissionError:[WinError 5]Отказановдоступе: 'c:\ users \ bialix \ appdata \ local \ temppip-6i_i7a-uninstallpython \ 3.3-32 \ scripts \ p
ip.exe '

上記の例外の処理中に、別の例外が発生しました。

トレースバック(最後の最後の呼び出し):
ファイル "C:\ Python \ 3.3-32 \ lib \ site-packagespip \ basecommand.py"、行122、メイン
write_debug_log = check_path_owner(debug_log_path)
ファイル「C:\ Python \ 3.3-32 \ lib \ site-packagespip \ commands \ install.py」、行283、実行中
build_delete =(not(options.no_cleanまたはoptions.build_dir))
ファイル「C:\ Python \ 3.3-32 \ lib \ site-packagespipreq.py」、1443行目、インストール中
commit_uninstallのファイル「C:\ Python \ 3.3-32 \ lib \ site-packagespipreq.py」、行610
ファイル「C:\ Python \ 3.3-32 \ lib \ site-packagespipreq.py」、1860行目、コミット中
rmtree内のファイル「C:\ Python \ 3.3-32 \ lib \ site-packagespip \ util.py」、43行目
rmtree内のファイル "C:\ Python \ 3.3-32 \ lib \ shutil.py"、行478
_rmtree_unsafe(path、onerror)を返します
_rmtree_unsafeのファイル "C:\ Python \ 3.3-32 \ lib \ shutil.py"、行368
_rmtree_unsafe(fullname、onerror)
_rmtree_unsafeのファイル "C:\ Python \ 3.3-32 \ lib \ shutil.py"、行368
_rmtree_unsafe(fullname、onerror)
_rmtree_unsafeのファイル "C:\ Python \ 3.3-32 \ lib \ shutil.py"、行368
_rmtree_unsafe(fullname、onerror)
_rmtree_unsafeのファイル "C:\ Python \ 3.3-32 \ lib \ shutil.py"、行373
onerror(os.unlink、fullname、sys.exc_info())
rmtree_errorhandlerのファイル "C:\ Python \ 3.3-32 \ lib \ site-packagespip \ util.py"、62行目
PermissionError:[WinError 5]Отказановдоступе: 'c:\ users \ bialix \ appdata \ local \ temppip-6i_i7a-uninstallpython \ 3.3-32 \ scripts \ p
ip.exe '

この問題に関する変更はありますか?

実用的な意味で修正することはできません(少なくとも、修正する方法をまだ誰も理解していないため、誰かが評価のために完全で機能するパッチを提供する必要があります。これは本質的にWindowsの制限です)。

Windowsでpipをアップグレードする正しい方法は、 python -m pip install -U pipです。

@pfmoore Python 2.6はどうですか?

[py26] C:\Users\IEUser>python -m pip --version
C:\Users\IEUser\Anaconda\envs\py26\python.exe: pip is a package and cannot be directly executed

@dalcinlため息。 Python2.6について考える必要はありません:-)

私が覚えているなら、 python -m pip.__main__はそこで機能します。 現時点でテストするためのPython2.6のコピーがありません。申し訳ありません...

Python 2.6でテストしたところ、 python -m pip.__main__は実際にそこで機能します。

こんにちは!

python -m pip install -U pipは私には機能しません(w7、powershell、chocolatey経由でインストールされたpython); インストールが権限の問題で失敗します:

PS C:\tools> python --version
Python 3.4.3
PS C:\tools> pip --version
pip 6.0.8 from C:\tools\python\lib\site-packages (python 3.4)
PS C:\tools> python -m pip install -U pip
You are using pip version 6.0.8, however version 7.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-7.0.1-py2.py3-none-any.whl#md5=9b403ba9b82d4a1e5fda5b6cc8952b57
  Using cached pip-7.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 6.0.8
    Uninstalling pip-6.0.8:
      Exception:
      Traceback (most recent call last):
        File "C:\tools\python\lib\shutil.py", line 523, in move
          os.rename(src, real_dst)
      PermissionError: [WinError 5] Access is denied: 'c:\\tools\\python\\lib\\site-packages\\pip-6.0.8.dist-info\\description.rst' -> 'C:\\Users\\Administrator\\AppData\\Local\\Temp\\pip-4ghq1oa9-uninstall\\tools\\python\\lib\\site-packages\\pip-6.0.8.dist-info\\description.rst'

      During handling of the above exception, another exception occurred:

      Traceback (most recent call last):
        File "C:\tools\python\lib\site-packages\pip\basecommand.py", line 232, in main
          status = self.run(options, args)
        File "C:\tools\python\lib\site-packages\pip\commands\install.py", line 347, in run
          root=options.root_path,
        File "C:\tools\python\lib\site-packages\pip\req\req_set.py", line 543, in install
          requirement.uninstall(auto_confirm=True)
        File "C:\tools\python\lib\site-packages\pip\req\req_install.py", line 667, in uninstall
          paths_to_remove.remove(auto_confirm)
        File "C:\tools\python\lib\site-packages\pip\req\req_uninstall.py", line 126, in remove
          renames(path, new_path)
        File "C:\tools\python\lib\site-packages\pip\utils\__init__.py", line 316, in renames
          shutil.move(old, new)
        File "C:\tools\python\lib\shutil.py", line 536, in move
          os.unlink(src)
      PermissionError: [WinError 5] Access is denied: 'c:\\tools\\python\\lib\\site-packages\\pip-6.0.8.dist-info\\description.rst'

考え?

そのファイルをロックしたり、削除する権限を与えたりする方法はありません。 それはチョコレートの問題でしょうか? コマンドプロンプトからそのファイルを手動で削除できますか?

@AmazingHorse試してみましたか

curl -k https://bootstrap.pypa.io/get-pip.py | python

あなたがcURLを持っていると仮定しますか?

興味深いことに、 @ pfmoore 、そのファイルは管理者のコマンドプロンプトでもロックされています。

したがって、pipの問題というよりは、Windowsのアクセス許可の問題のように聞こえます。

私のPythonがCのWindowsディレクトリ構造の外にインストールされたという事実と関係がありますか?

私はこれをグーグルで検索しますが、誰かがこれが原因であると思うかもしれないものをここに投稿できるかどうか興味があります。

乾杯みんな

@AmazingHorse正直なところ

しかし、はい、それはそれの音からのピップの問題ではありません。

Windowsでは、メモリマップファイル(イメージまたはデータとしてマップされている)の名前を変更したり、同じボリューム上の新しい名前に移動したりできます。 したがって、 rmtreeエラーハンドラーは、ファイルの名前を変更して、ファイルをベース一時ディレクトリに移動しようとすることができます。 少なくとも、ディレクトリの削除を妨げることはありません。 この回避策は、ファイルが一時ディレクトリとは異なるボリュームにある場合、共有違反の場合、またはファイルのACLによって操作が妨げられている場合に失敗します。 ただし、この場合、これらのいずれも適用されません。

プロセストークンでAdministratorsグループが有効になっている場合は、システムの再起動時に、名前が変更されたファイルの削除をスケジュールできます。 ctypesを使用してMoveFileExW(path, None, MOVEFILE_DELAY_UNTIL_REBOOT)を呼び出すだけです。 ただし、通常のユーザーはセッションマネージャーのPendingFileRenameOperationsレジストリ値を変更できないため、これは失敗します。

更新> pip install --upgrade pipを除いて、Windows7 / 10でのpipは正常に機能しています
C:\(SSD)に可能な限り少ない負荷をかけ、D:\ NUC \から始まるツリーにソフトウェアをインストールしようとしています。
これが私が見ているものです:

D:\NUC\Python34>pip install --upgrade pip
You are using pip version 6.0.8, however version 7.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-7.1.2-py2.py3-none-any.whl#md5=5ff9fec0be479e4e36df467556deed4d
  Downloading pip-7.1.2-py2.py3-none-any.whl (1.1MB)
    100% |################################| 1.1MB 204kB/s
Installing collected packages: pip
  Found existing installation: pip 6.0.8
    Uninstalling pip-6.0.8:
      Exception:
      Traceback (most recent call last):
        File "D:\NUC\Python34\lib\shutil.py", line 523, in move
          os.rename(src, real_dst)
      OSError: [WinError 17] The system cannot move the file to a different disk drive: 'd:\\nuc\\python34\\scripts\\pip.exe' -> 'C:\\Users\\David\\AppData\\Local\\Temp\\pip-247i52js-uninstall\\nuc\\python34\\scripts\\pip.exe'

      During handling of the above exception, another exception occurred:

      Traceback (most recent call last):
        File "D:\NUC\Python34\lib\site-packages\pip\basecommand.py", line 232, in main
        File "D:\NUC\Python34\lib\site-packages\pip\commands\install.py", line 347, in run
        File "D:\NUC\Python34\lib\site-packages\pip\req\req_set.py", line 543, in install
        File "D:\NUC\Python34\lib\site-packages\pip\req\req_install.py", line 667, in uninstall
        File "D:\NUC\Python34\lib\site-packages\pip\req\req_uninstall.py", line 126, in remove
        File "D:\NUC\Python34\lib\site-packages\pip\utils\__init__.py", line 316, in renames
        File "D:\NUC\Python34\lib\shutil.py", line 536, in move
          os.unlink(src)
      PermissionError: [WinError 5] Access is denied: 'd:\\nuc\\python34\\scripts\\pip.exe'

AppDataフォルダーパスは私のD:ドライブで利用可能であり、後続のツールと使用法のためにこの状況を処理するための最善の方法を考えています。 ジャンクションのことを考えましたが、それでも別のドライブのように見えます。 たぶん、予想される場所と実際の場所の差をスクリプト化して、正しいパスを確認しますか? これを行う前に、pipはdjangoを問題なくインストールしました(ただし、この発見につながったバージョンについて不平を言いました)。 うーん...そして今ピップが壊れているようです。

D:\NUC\Python34\Scripts>pip -h
Traceback (most recent call last):
  File "D:\NUC\Python34\lib\runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "D:\NUC\Python34\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\NUC\Python34\Scripts\pip.exe\__main__.py", line 5, in <module>
ImportError: No module named 'pip'

D:\NUC\Python34\Scripts>dir
 Volume in drive D is TOSHIBA EXT
 Volume Serial Number is E085-D5D7

 Directory of D:\NUC\Python34\Scripts

08/25/2015  09:08 AM    <DIR>          .
08/25/2015  09:08 AM    <DIR>          ..
08/25/2015  09:08 AM            92,045 django-admin.exe
08/25/2015  09:08 AM               136 django-admin.py
08/25/2015  09:01 AM               346 easy_install-3.4-script.py
08/25/2015  09:01 AM            65,536 easy_install-3.4.exe
08/25/2015  09:01 AM               651 easy_install-3.4.exe.manifest
08/25/2015  09:01 AM               338 easy_install-script.py
08/25/2015  09:01 AM            65,536 easy_install.exe
08/25/2015  09:01 AM               647 easy_install.exe.manifest
08/25/2015  08:19 AM            91,984 pip.exe
08/25/2015  08:19 AM            91,984 pip3.4.exe
08/25/2015  08:19 AM            91,984 pip3.exe
08/25/2015  09:08 AM    <DIR>          __pycache__
              11 File(s)        501,187 bytes
               3 Dir(s)  328,895,152,128 bytes free

D:\NUC\Python34\Scripts>

あなたはpython.exe -m pip install --upgrade pipをしなければなりません

Python 2.6では、 python -m pip.__main__ install -U pipを実行する必要があります

現在の状況は、新しいPythonユーザーだけでなく、通常はWindowsを使用しない私のような古いPythonユーザーにとっても非常に悪いと思います。 python -m pip install --upgrade pipを使用してもまったく問題ありませんが、Windowsではpip install --upgrade pipが自動的に推奨するはずです。 @dstufftはすでに2013年にこれを提案しました。それをしない正当な理由はありますか?

PS:この問題の重複として#3462を報告して申し訳ありません。 トラッカーでWindowsError検索しても、この問題は見つかりません

私の知る限りでは、pipがそれ自体の新しいバージョンを検出するときにユーザーに提案するのはすでにコマンドです。 状況はそれほど悪くはありません。

@pekkaklarckそれをしない主な理由は、見つけるのが本当に難しいということです。 まず、pipがpython -m pipからではなくpip.exeから実行されていることを確実に検出する方法がわかりません。 そして、それを検出した場合でも、インストールされているものにpipが含まれているかどうかを確認する必要があります( pip install --upgrade -r http://some.remote/requirements.txt検討してください-要件ファイルを読むまでには、おそらく遅すぎて発行できませんメッセージ)。

もちろん、100%完璧ではないものは、実装するのに完全に合理的なものです。それは、すべてのコーナーケースを確実にキャッチするのではなく、完全に有効な使用法に反対しないようにすることです。これは非常に重要です。

私たちは確かにこの問題に対処するためにPRをマージすることを検討しますが、コアピップ開発者の誰もが自分で修正を試みるのに十分な問題があるとは思わない(私はおそらくコア開発者の中で最も重いWindowsユーザーであり、 python -m pipを使用することを覚えているの

私たちがpip[.exe]かどうかを見つけるために、私は想像します

"pip" in os.path.basename(sys.argv[0])

うまくいくでしょう。 また、呼び出しに[-U|--upgrade]pipが表示されることを警告するだけで、呼び出しの90%を修正するのにおそらく十分です。

@stonebig :そのコマンドがいつ推奨されるかを明確にできますか? Python 2.7.11を新しくインストールした後、 pip install -U pipを試しましたが、次のエラーで失敗しました。

WindowsError:[エラー5]アクセスが拒否されました: 'c:\ users \ koulutus \ appdata \ local \ temppip-65z4kx-uninstallpython27 \ scriptspip.exe'

@pfmoore :要件ファイルのpipをアップグレードすることは非常にまれに聞こえ、おそらく無視される可能性があります。 @Ivozのように、 pip.exesys.argvにあると思いました。 あるいは、 WindowsErrorをキャッチして、それに反応することが可能であるはずです。

@Ivozは機能しますか? pip.exeラッパーがサブプロセスとしてpythonを呼び出すと思ったので、機能しませんでした。 しかし、簡単なテスト( sys.argv[0]pip.main() )は次のことを示しています。

>py -m pip
C:\Users\Gustav\AppData\Local\Programs\Python\Python35\lib\site-packages\pip\__main__.py

Usage:
...

>pip
C:\Users\Gustav\AppData\Local\Programs\Python\Python35\Scripts\pip

Usage:
...

>pip.exe
C:\Users\Gustav\AppData\Local\Programs\Python\Python35\Scripts\pip

Usage:

したがって、機能しますが、 sys.argv[0] pipを見つける方法に注意する必要があります(最初の例では、 __main__.pyへのパスにディレクトリpipが含まれていることに注意してください。 __main__.py

これを指摘してくれてありがとう。 私は今日何かを学びました:-)

@pekkaklarck WindowsErrorをキャッチするの問題(私が思い出した場合)は、それがかなり遅く発生し、インストールが部分的に完了している(そしてロールバックするのが簡単ではない)ことです。

しかし、私は誰かがこの問題を修正しようとするのを思いとどまらせたくないので、そのままにしておきます:-)

ただし、sys.argv [0]でpipを見つける方法に注意する必要があります。

したがって、 @ pfmooreos.path.basenameへの呼び出しです。

@Ivozため息。 ここでは夜遅く。 はい、明らかに:-)

@pekkaklarck 。 たとえば、(Windowsで) pip list実行する場合。 昨年の議論で私が覚えている限り:

  • これは、pypaチームが信頼できると想像した唯一のソリューションでした。
  • Windowsにのみ表示されます。

pip_example

より良い解決策があるかもしれませんが、それは以前の状況からの完全な答えのすでに80%であると思います。

おそらく、より良い解決策は、「pip」に固定されていない、PythonのデフォルトのWindowsインストールで「upgrade_pip.bat」を配信することです。これでそのコマンドが実行されます。 (またはpip_update.bat 、コンダとのマッチングを改善しますか?)

私は今日、新しいWindowsPythonユーザーエクスペリエンスに飛び込んでいるときにこれにぶつかりました。 ひどいものでした。
そのコマンドに対して-m自動化できますか? (おそらく、アップグレードピップに独自のコマンドを与えますか?)

特にコマンド_pipが実行するように指示した後は特に、ユーザーがこれを確認する必要はありません。

screen shot 2016-02-23 at 9 51 53 pm

Windowsユーザーにpython -m pip install --upgrade pip代わりにpip install --upgrade pip python -m pip install --upgrade pipを使用するように指示するために、7.0.1よりも新しいバージョンのpipでログ設定がすでに行われていると思います。

:sparkles :: cake :: sparkles:

はい、7.1 cf#2830以降

\ O /

Win 10でピップをアップグレードできません。何が問題なのですか?

default

@grasx
本当に何が悪いのか知りたいのなら、このスレッドを読んでください。 これを機能させることにのみ関心がある場合は、取得した出力の最後の行を読んで、実行したものと比較してください。

@ piotr-dobrogost
それは...ですか? 最後の赤い線は、Windowsでのインプレース更新の通常の結果であるアクセス拒否エラーではなく、デコードの問題を示しているように見えます。 @grasxの問題は、キリル文字のコードページの使用に関連している可能性がありますか?

@grasxで発生した問題がこの問題に関連しているとは

@nmusatti
あなたが正しいです。 私の悪い。

@ piotr-dobrogost @nmusatti @pekkaklarckただし、ありがとうございます。ユーザー名を変更したため、ASCII文字のみが含まれ、pipが8.1に正常にアップグレードされました。

@grasxはユーザーの名前を変更しましたか?私はあなたが言ったことに混乱しています...私は同じ問題を抱えています、何か違いは私がウィンドウズ7

ランダムなアイデア、必要がなければexeファイルを置き換えないのはどうですか

私が理解している限り、exeファイルは通常機能する非常に小さなトランポリンです

より重要なロジックは、付随するスクリプトファイルにあります

@ pzz2011さて、実際に私は自分の勝利を再インストールし、新しいユーザー名を設定しました。 私の場合、それが言及されているすべての場所とルートでそれを変更する方法を見つけるのは簡単でした:)

@RonnyPfannschmidt .exeの作成に使用されるものによって異なります- foo.exe + foo-script.pyを使用するために使用されるsetuptools(現在何が行われるかはわかりません)が、distlib(そのように構成されている場合)は単一のfoo.exe作成しますスクリプトを埋め込む

@grasx hhh ...私はそれを解決するより簡単な方法を見つけました。 Pythonを2.7.xから2.7.10に再インストールするだけです。
それなら成功は私に微笑む〜

Windowsでは、管理者モードでコマンドプロンプトウィンドウを使用します。 次に、コマンドを入力します
python -m pip install --upgrade pip

私はそれがあなたのために働くことを願っています。 それが私がそれをウィンドウ10で動作させる方法です

幸運を。

@grasx理由は完全には

Windowsユーザー向けの参考までに。 Cygwinをインストールすると、Python2.7が自動的にインストールされます。 次に行う必要があるのは、実行することだけです。

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py

(はい、最初にwgetをインストールする必要があります。)

image
この問題を解決する方法は?

@ JingY0604
ここでテキストをコピーする方法の説明については、コマンドプロンプトウィンドウからテキストをコピーするにはを参照してください。 このようにして、投稿したテキストを検索できるようになります。

pipバージョン7.1.0を使用していますが、バージョン9.0.1が利用可能です。
'python -m pip install --upgrade pip'commを介したアップグレードを検討する必要があります
そして。
D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_vendorrequ
ests \ packages \ urllib3 \ util \ ssl_.py:90:InsecurePlatformWarning:真のSSLContex
tオブジェクトは使用できません。 これにより、urllib3がSSLを適切に構成できなくなります
elyであり、特定のSSL接続が失敗する可能性があります。 詳細については、httを参照してください。
ps://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning。
InsecurePlatformWarning
ピップを集める
pip-9.0.1-py2.py3-none-any.whl(1.3MB)のダウンロード
例外:
トレースバック(最後の最後の呼び出し):
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ base
command.py "、223行目、メイン
status = self.run(options、args)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ comm
ands \ install.py "、行282、実行中
require_set.prepare_files(finder)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py "、334行目、prepare_files
functools.partial(self._prepare_file、finder))
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py "、行321、_walk_req_to_install
more_reqs = handler(req_to_install)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py "、491行目、_prepare_file
session = self.session)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py "、825行目、unpack_url
セッション、
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py "、行673、unpack_http_url
from_path、content_type = _download_http_url(link、session、temp_dir)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py "、行886、_download_http_url
_download_url(resp、link、content_file)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py "、行621、_download_url
進行中のチャンクの場合_indicator(resp_read(4096)、4096):
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ util
s \ ui.py "、135行目、iter
self.next(n)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress__init __。py "、73行目、次
self.update()
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress \ bar.py "、82行目、更新中
self.writeln(line)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress \ helpers.py "、69行目、writeln
print(line、end = ''、file = self.file)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py "、133行目、書面
self.write_and_convert(text)
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py "、161行目、write_and_convert
self.write_plain_text(text、cursor、len(text))
ファイル "D:\ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py "、166行目、write_plain_text
self.wrapped.write(text [start:end])
UnicodeEncodeError: 'ascii'コーデックは位置8の文字u '\ u258f'をエンコードできません
:序数が範囲外(128)

@ JingY0604

既存のインストールをアンインストールし、get-pip.pyを使用して新しいバージョンをインストールすることで、pipをアップグレードできます。

https://github.com/ofek/hatchの場合、自分自身を更新するすべてのインスタンスをキャッチし、それを許可しません。 次に、明示的な--selfフラグを使用して、Popensがpython -m pip install -U hatchなり、すぐに終了するようにします。

https://github.com/ofek/hatch/blob/22e621715fbed36c2bfab35ae9fa9649ea6dfe1e/hatch/cli.py#L509

編集:技術的には、 pythonだけでなく、 sys.executableが実際に使用されます

@ ofek #4490はpipに変更を加え、より良いメッセージIIRCを出力しました。

だから今のところ、pipなしでpythonをインストールした場合、将来pipモジュールをインストールすることはできませんか?

c:\Python27>python.exe get-pip.py ERROR: To modify pip, please run the following command: c:\Python27\python.exe -m pip

c:\Python27>c:\Python27\python.exe -m pip install c:\Python27\python.exe: No module named pip

ねえ@ihormelnyk!

そうではありません。 これの条件は広すぎました。「pip」という単語が含まれているスクリプトを使用すると、pipが変更されなくなります。 この問題を回避するには、get-pip.pyの名前を「pip」という単語を含まないように変更してみてください。

10.0.1リリース(今週発生する可能性が高い)でこの問題が修正されます。

@pradyunsgヒントを共有してございます。 @ihormelnykと同じ問題がget-pip.pyファイルの名前をpipという単語を含まない名前に変更すると問題が発生しました。

cmd inwindowsでpipを印刷しましたが、表示されました
ランチャーの致命的なエラー: '"" d:\ program files(x86)python3.6python.exe "" D:\ Program Files(x86)python3.6 \ Scriptspip.exe "'を使用してプロセスを作成できません
私はすでにピップの環境を設定しましたが、それは機能しません、それを理解する方法は?

@ BJQ98 #5223を見たいと思います。

pradyunsgは、10.0.1でこれを修正すると述べましたが、方法がわかりません。 ありがとう。

C:\Users\clarkk\AppData\Local\Programs\Python\Python36>python -m pip install -U pip
Collecting pip
  Using cached https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
  Rolling back uninstall of pip
Exception:
Traceback (most recent call last):
  File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\commands\install.py", line 342, in run
    prefix=options.prefix_path,
  File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\req\req_set.py", line 784, in install
    **kwargs
  File "C:\Users\yangg\AppData\Roaming\Python\Python36\site-packages\pip\req\req_install.py", line 851, in install
    self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
  File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\req\req_install.py", line 1064, in move_wheel_files
    isolated=self.isolated,
  File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\wheel.py", line 462, in move_wheel_files
    generated.extend(maker.make(spec))
  File "C:\Users\yangg\AppData\Roaming\Python\Python36\site-packages\pip\_vendor\distlib\scripts.py", line 372, in make
    self._make_script(entry, filenames, options=options)
  File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\_vendor\distlib\scripts.py", line 276, in _make_script
    self._write_script(scriptnames, shebang, script, filenames, ext)
  File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\_vendor\distlib\scripts.py", line 212, in _write_script
    launcher = self._get_launcher('t')
  File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\_vendor\distlib\scripts.py", line 351, in _get_launcher
    result = finder(distlib_package).find(name).bytes
AttributeError: 'NoneType' object has no attribute 'bytes'
You are using pip version 9.0.3, however version 10.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

#5343と同じになります。

pradyunsgに感謝します、他の誰かの解決策はより簡単であることがわかりました。 最初に「python-mpip Uninstall pip」を実行し、次に「python -m pip install-Upip」を実行しました。

要件はすでに最新です:c:\ user \ clarkk \ appdata \ local \ Programs \ Python \ Python36 \ lib \ site-packages(10.0.1)のpip

      Personally I think it should be windows only. I view it as a work around for the way the Windows platform works, and something that's a target to eventually remove for something nicer down the road.

上記のコマンドの実行中にエラーが発生しました。単語の構文エラーが原因で、これに対する解決策が得られる可能性があります。

@AProNoob Pythonプロンプトではなく、コマンドプロンプト(cmdまたはpowershell)でコマンドを実行する必要があります。

ありがとう! それはうまくいきました!

このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価