나는 우분투를 처음 사용하므로 나와 함께하십시오. pip
이 명령을 사용하여 설치했습니다 : sudo apt-get -y install python-pip
. 그런 다음 웹 사이트의 명령을 사용하여 NLTK 를 설치했습니다 sudo pip install -U nltk
. 그러나 나는 내가 한 모든 일이 “파산 된 관행”이라고 말하는 이 질문 에 걸려 넘어 졌다. 가장 큰 타격은 사용 sudo pip
이 본질적으로 잘못되었고 pip
너무 많은 힘 을 주면 운영 체제 파일이 손상 될 수 있다는 것입니다. 누구든지이 주장을 확인할 수 있습니까?
참고- sudo
명령을 시도 할 때 apt-get -y install python-pip
2 개의 오류가 발생 했기 때문에 사용 했습니다.
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
답변
모두 sudo pip install
와 다른 일반적인 변형은 sudo -H pip install
해야 하지 그것을 사용하는 사용 루트 권한에 대한 보안 위험 때문에 권장 pip
PyPI (파이썬 패키지 인덱스)에서 파이썬 패키지를 설치가.
에서 https://stackoverflow.com/a/21056000/486919 (강조 광산) :
당신이 실행하는 경우
pip
에sudo
, 당신은 실행setup.py
으로sudo
. 즉, 인터넷에서 루트로 임의의 Python 코드를 실행합니다.
누군가 PyPI에 악성 프로젝트를 설치하고 설치
하면 공격자에게 컴퓨터에 대한 루트 액세스 권한 이 부여됩니다. 최근에pip
PyPI를 수정하기 전에 공격자는 신뢰할 수있는 프로젝트를 다운로드 할 때 중간 공격에서 사람을 실행하여 코드를 삽입 할 수도 있습니다.
https://security.stackexchange.com/a/79327/8761 에서 언급했듯이 누구나 악성 패키지를 포함하여 Python 패키지를 PyPI에 업로드 할 수 있습니다.
간단히 말해, 최소 권한 원칙 에 따라 꼭 필요한 경우가 아니면 PyPI에서 Python 패키지를 설치 sudo
하는 pip
데 사용하지 마십시오 . 대신, 사용을 고려 pip install --user
(주이 pip install
아니오 sudo
로도 추가 플래그 / 옵션의 기본값은 pip install --user
현재 우분투) 또는 (같은 가상 환경 virtualenv
). 당신은 사람들이 추천을 참조하면 sudo pip
나 sudo -H pip
에게하지 말라고 알려주십시오.
답변
당신은 사용해야합니다 sudo
핍 설치하는 APT와을 ( sudo apt install python-pip
) 만에 명시된 바와 같이 edwinksl의 대답 은 사용하지 말아야 sudo
패키지 설치 핍과를 , 당신은 사용해야하는 pip install --user <package>
사용자 만 설치하거나 사용하는 VIRTUALENV를 더욱 패키지의 범위를 제한하는 .
Apt는 Ubuntu의 리포지토리에서 패키지를 설치하는 반면 pip는 PyPi에서 사용자가 업로드 한 패키지를 악성으로 설치할 수 있습니다.
답변
그리고 더 부드럽게 대답하기 위해 :
- 당신은 항상 그럴 필요가 있습니다
sudo apt-get install ...
. 그것이 도구가 작동하도록 설계된 방식입니다. - 정확히 무엇을하고 싶은지에 따라 (따라서 “논쟁”)
sudo [-H]
with를 사용 하는pip install
것은 가능하고 선택적인 것입니다.
파이썬의 모토 중 하나 는 “한 가지 분명한 방법이 있어야한다”는 것이다. 그리고 대부분의 모토와 마찬가지로, 가능한 모든 기회에서듯한 경쾌한 기쁨으로 깨졌습니다. 불행히도, 나의 가장 겸손한 견해로, 파이썬 생태계는 충돌 하는 많은 “단단하고 빠른”규칙으로 구성되어 있습니다. 세부 사항 등). 거의 모든 경우에, 이것은 언어 및 도구의 역사적 발전에 기인 한 것입니다 (그리고 그들이 직업을 갖고 싶어 할 때 역사 수업을 원하거나 필요로하는 사람). 그러나 Mac / Win /의 차이점 때문일 수도 있습니다 * Nix 플랫폼 (예 : 유닉스 / 리눅스의 사고 방식은 비슷합니다.이 “파산 된 관행” 과 “본질적으로 잘못된” 화물 컬트리스트를 모두 소금에 절이십시오. 일부는 실제로 의미가 있습니다. (다른 사람들은 단지 의미가 있습니다.)
우선, 기본 “사용자 별 설치”보다는 거의 항상 virtualenv를 선호하게 될 것입니다. 실제로 이것이 아마도 여러분이 필요로하는 것이기 때문입니다. 따라서 지금부터 시작할 수도 있습니다. 이것이 어떻게 이루어지는 지 정확히 “의존”(위의 파이썬 모토 참조). Conda (대부분 Mac 및 Windows 용)를 사용하는 경우 Conda 를 사용하여 설정됩니다 . “pure”Python [sic] 을 사용하는 경우 버전 및 사용하는 python 유틸리티에 따라 다르지만 virtualenvwrapper 는 매우 유용합니다.
둘째, “never sudo”규칙에 대한 반대의 예와 같이 sudo -H pip install -U numpy
, 원하는 경우에만 큰 라이브러리를 다운로드 / 다시 설치 / 유지하는 것을 피할 수 있다는 점에서 매우 좋습니다. 모든 virtualenv에 개별적으로 하나의 버전이 필요합니다. scikit-learn, NumPy, matplotlib, SciPy, pandas 등과 같은 널리 사용되는 프레임 워크는 한 번 설치 한 후 여러 환경에서 재사용 할 수 있습니다 . 또한 로컬 친화적 인 sys-admin은 시스템의 모든 사용자 에게이 기능을 sudo
설치할 수 있으며 TensorFlow와 같은보다 복잡한 설치를 위해을 통해이 작업을 수행했을 것 입니다.
마지막으로, (Twitter API, 텍스트 munging, 코드 형식 등) 그러한 임의의 타사 라이브러리를 설치하는 경우 sudo를 통해 루트로 설치하지 마십시오. 물론 현재 사용자로 설치하십시오. 그러나 단지 기억 하여 사용자 계정이 모든 정말 중요한 물건이있다 .
답변
“sudo pip install”을 사용하면 OS 공급 업체에서 제공 한 Python 컨텐츠를 덮어 쓸 수 있습니다. 이 경우 영향을받는 공급 업체 패키지는 “rpm –verify”를 통과하지 않으며 패키지가 손상된 것으로 나타납니다.
OS 공급 업체에서 테스트 한 시스템 관리 도구 를 사용 하시겠습니까, 인터넷에서 다운로드 한 테스트되지 않은 구성 요소를 사용해도됩니까?
악성 패키지가 PyPI에 업로드되지 않으면 “sudo pip install”을 사용하는 사람들은 전체 시스템 권한으로 악성 페이로드를 실행하게됩니다. 너 저걸 원하니? (#principleofleastprivilege)
그것이 단지 랩톱이고 고양이 사진 만 몇 개만 위험한다면 위험이 낮을 것입니다.하지만 다중 사용자 시스템 인 경우 위험에 N을 곱한 것입니다. 가치가있는 시스템 또는 시스템 가용성 또는 안정성에 가치가있는 경우 위험도 증가합니다.
자신의 모험을 자유롭게 선택하되, 선택의 영향을받을 수있는 다른 사용자의 사전 동의를 받으십시오. 그들은 당신과 같은 수준의 위험에 익숙하지 않을 수 있습니다.
답변
이 답변에 추가하려면 : 우분투에 대해 모르겠지만 Fedora에서 sudo dnf install python3-numpy
형식을 사용 하여 유용한 많은 패키지 를 설치할 수 있습니다 . 이것은 안전하지 않다는 단점이 없으며 (distro repo 유지 관리자가 패키지를 검증 함) 시스템 전체에 설치할 수도 있습니다. 단점은 배포판 repo 버전이 PyPI에서 패키지를 약간 지연시킬 수 있다는 것입니다.
답변
아니요, 맞습니다. 이 주장을 확인할 수 없습니다. 나는 항상와 sudo -H
함께 사용 합니다 pip
. pip
운영 체제 파일 만 손상시킬 수 있습니다 apt
. 만 사용하지 않는 sudo
으로 pip
해당 사용자 만 설치하려는 경우.