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 패키지에는 혼합해서는 안 되는 두 가지 가능한 전략이 있습니다. 하나를 선택하세요. 상황에 따라 하나에서 다른 것으로 전환할 수 있습니다.
1) 데비안에서 제공하는 패키지만 사용하세요
즉, 당신은 무엇이든 할 수 있습니다 apt install
. PIL이 필요하신가요? apt install python-pil
또는 apt install python3-pil
. 이렇게 하면 모든 파일이 데비안에서 적절하게 관리되고 무료 보안 지원 및 기타 데비안 패키지를 받을 수 있습니다. 어쨌든 7월쯤까지는 Stretch의 보안 지원이 중단되기 시작할 것입니다.
이는 때때로 이전 버전의 패키지를 허용해야 함을 의미합니다. 때로는 필요한 패키지를 전혀 찾지 못할 수도 있습니다. 어쩌면 이것은 Stephen이 설명한 방식을 사용하여 패키지를 설치함으로써 보완될 수 있습니다 pip --user
. 아직 시도하지 않았습니다.
2) 가상환경을 활용하라
Python 가상 환경을 설정할 수 있습니다( sudo apt install virtualenv; virtualenv venv; source venv/bin/activate
). 이 virtualenv에 패키지를 설치하거나 pip를 업그레이드할 수 있으며 이러한 모든 설치는 이 virtualenv 내에 완전히 포함됩니다. 이는 또한 다양한 프로젝트에 다양한 버전의 패키지를 사용할 수 있으며 PyPi의 모든 것을 사용할 수 있음을 의미합니다. rm -r venv/
모든 소프트웨어 패키지를 포함하여 전체 가상 환경이 삭제됩니다. 운영 체제 파일과 충돌하지 않습니다.
이 접근 방식을 사용하면 프로젝트 요구 사항이 더욱 명확해지고 관리가 쉬워집니다. 반면에 이러한 패키지를 보안 수정 사항으로 업데이트하는 부담은 귀하에게 있습니다. 이는 소규모 일회성 프로젝트의 경우 약간 지루하지만 특정 상황에서는 매우 유용할 수 있습니다.