
pipのアップグレードにsudoコマンドを使用するのは良い考えではないというコメントを読んだ。私の問題は、sudoを提供しないと権限エラーが発生することです。この問題をどのように解決できますか?また、pipをアップグレードするためにsudoを使用することをお勧めしないのはなぜですか?
$python -m pip install --upgrade pip
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting pip
Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 19.2.3
Uninstalling pip-19.2.3:
Successfully uninstalled pip-19.2.3
Rolling back uninstall of pip
Moving to /home/abc/.local/bin/pip
from /tmp/pip-uninstall-V4F8Pj/pip
Moving to /home/abc/.local/bin/pip2
from /tmp/pip-uninstall-V4F8Pj/pip2
Moving to /home/abc/.local/bin/pip2.7
from /tmp/pip-uninstall-V4F8Pj/pip2.7
Moving to /home/abc/.local/lib/python2.7/site-packages/pip-19.2.3.dist-info/
from /home/abc/.local/lib/python2.7/site-packages/~ip-19.2.3.dist-info
Moving to /home/abc/.local/lib/python2.7/site-packages/pip/
from /home/abc/.local/lib/python2.7/site-packages/~ip
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/pip-20.0.2.dist-info/top_level.txt'
Consider using the `--user` option or check the permissions.
WARNING: You are using pip version 19.2.3, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
答え1
パッケージ管理システムの外部でオペレーティングシステムが提供するツールのバージョンをアップグレードしないでください。新しいパッケージがリリースされると、変更が上書きされます。
またsudo pip install --upgrade pip
悪いです。オペレーティングシステムパッケージシステムはこれらのファイルを制御し、ユーザーがそのファイルを上書きしたと思います。インストールを含む奇妙な動作が発生する可能性があります年をとるバージョンが以前にインストールしたバージョンよりも高いです!
最新バージョンが必要な場合は、ユーザープロファイルにインストールできます。
% pip install --upgrade --user pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl (1.4MB)
100% |################################| 1.4MB 615kB/s
Installing collected packages: pip
Successfully installed pip-20.0.2
最新バージョンがインストールされます。$HOME/.local/bin
% ls -l .local/bin/pip
-rwxr-xr-x 1 sweh sweh 223 Feb 16 21:49 .local/bin/pip
$HOME/.local/bin
PATHにいる場合は、常にpipがインストールしたプログラムを選択します。
しかし、ほとんどの場合そうではありません。必要アップグレードpip
。
答え2
sudo pip install foo
Stephensの答えに加えて、pip(つまり)インストールパッケージをグローバルに使用してはいけません。 pipのアップグレードと同様に、これはデプロイメントによって提供されるファイルを妨げ、クラッシュする可能性があります。
DebianのPythonパッケージには混在してはならない2つの可能な戦略があります。 1つを選択してください。状況に応じて、あるものから別のものに切り替えることができます。
1)Debianが提供するパッケージのみを使用してください
つまり、あなたは何でもすることができますapt install
。 PILが必要ですか?apt install python-pil
またはapt install python3-pil
。これにより、すべてのファイルがDebianで適切に管理され、無料のセキュリティサポートやその他のDebianパッケージを受け取ることができます。とにかく7月ごろまでは、Stretchのセキュリティサポートが中断され始めます。
これは時々古いバージョンのパッケージを受け入れる必要があることを意味します。時には、必要なパッケージがまったく見つからないことがあります。おそらく、これはStephenが説明した方法を使用してパッケージをインストールすることによって補完することができますpip --user
。まだ試していません。
2) 仮想環境を活用せよ
Python仮想環境を設定できます(sudo apt install virtualenv; virtualenv venv; source venv/bin/activate
)。このvirtualenvにパッケージをインストールするか、pipをアップグレードすることができ、これらのインストールはすべてこのvirtualenv内に完全に含まれています。これはまた、さまざまなプロジェクトにさまざまなバージョンのパッケージを使用でき、PyPiのすべてを使用できることを意味します。rm -r venv/
すべてのソフトウェアパッケージを含む仮想環境全体が削除されます。オペレーティングシステムファイルと競合しません。
このアプローチを使用すると、プロジェクトの要件がより明確になり、管理が容易になります。一方、これらのパッケージをセキュリティ修正で更新する負担はお客様にあります。これは、小規模のワンタイムプロジェクトでは少し退屈ですが、特定の状況では非常に便利です。