Python pip가 RPM이 설치된 모듈을 덮어쓰도록 해야 합니까?

Python pip가 RPM이 설치된 모듈을 덮어쓰도록 해야 합니까?

Python pip과 많은 Python 모듈은 CentOS Linux 리포지토리를 통해 제공됩니다. CentOS 7.x Linux에서는 pip표준 배포 패키지 관리자( )를 사용하여 설치 및 설치할 수 있습니다.pymongoyum install python-pip python-pymongo

그러나 저장소에 제공되는 버전은 pymongo이미 너무 오래되었습니다. 의 버전 pip도 일반적으로 뒤쳐져 있으므로 즉시 실행하는 것이 좋습니다 pip install --upgrade pip.

여기서 무엇을 해야 하는지에 대한 합의가 이루어졌나요? 업데이트를 실행하면 pipRPM의 파일을 덮어쓰므로 패키지 관리자로부터 불만 사항을 받을 수 있습니다.

pipRPM에서 모듈을 설치 하지 않는 것이 더 낫습니까 ? 어쩌면 RPM에서 Python을 설치한 다음 모든 모듈을 설치하면 됩니다 pip(Python 모듈이 RPM에서 나오지 않고 RPM에서 완전히 관리되지 않도록 pip).

답변1

이 질문을 살펴보십시오. 다른 디렉토리에 pip를 설치하는 방법에 대해 설명합니다. 이렇게 하면 rpm 설치를 유지하고 최신 버전을 사용할 수 있습니다. rpm 버전을 사용할 계획이 없다면 아마도 제거할 것입니다.

https://stackoverflow.com/questions/2915471/install-a-python-package-into-a- Different-directory-using-pip

답변2

시스템의 Python을 어지럽히지 않고 직접 Python을 사용하려면 Continuum의 Anaconda라는 제품을 확인하세요.http://Continuum.io/downloads Python 등의 설치는 홈 디렉토리에 설치되며 경로를 변경하여 시스템에 Python을 설치하지 않고 잠재적으로 시스템을 망칠 수 있습니다. 또한 이러한 옵션을 사용하여 가상 환경과 Conda 환경을 생성할 수 있으므로 여러 가지를 시도해 보고 마음에 들지 않으면 환경을 삭제할 수 있습니다.

답변3

RPM에서 pip와 모듈을 설치하지 않는 것이 더 낫습니까? 어쩌면 RPM에서 Python을 설치한 다음 pip에서 모든 모듈을 설치하면 됩니다(Python 모듈이 RPM에서 나오지 않고 pip에서 완전히 관리되지 않도록).

운영 체제의 패키지 관리자에서 pip 및 기타 Python 모듈을 설치할 수 있습니다. 많은 시스템 구성 요소가 Python에 의존하므로 더 이상 선택의 여지가 없을 수 있으며 운영 체제의 최소 설치에서도 기본적으로 Python + Python 모듈이 설치됩니다.

따라서 pip 또는 Python 모듈의 "시스템 전체" 버전을 업그레이드해야 하지만 패키지 관리자가 관리하는 파일을 방해하고 싶지 않을 때마다 다음을 수행해야 합니다.

다음 지침은 사용 가능한 Python 버전이 2.7.x인 경우 RHEL 파생 운영 체제에 적용됩니다. 설치된 Python 버전과 일치하도록 PYTHONPATH를 조정해야 합니다.

  • python-pip의 패키지 관리자 버전이 설치되어 있는지 확인하십시오. 예를 들어 yum -y install python-pip.

  • PYTHONPATH 환경 변수를 설정하는 profile.d 스크립트를 만듭니다.

    # Ensure PYTHONPATH is configured to use /usr/local/lib*/python2.7/site-packages
    read -r -d '' pythonpath_profile_script <<'EOF'
    pythonpathmunge () {
        case ":${PYTHONPATH}:" in
            *:"$1":*)
                ;;
            *)
                if [ "$2" = "after" ] ; then
                    PYTHONPATH=$PYTHONPATH:$1
                else
                    PYTHONPATH=$1:$PYTHONPATH
                fi
        esac
    }
    
    pythonpathmunge /usr/local/lib/python2.7/site-packages
    pythonpathmunge /usr/local/lib64/python2.7/site-packages
    export PYTHONPATH
    EOF
    
    echo "Creating the /etc/profile.d/pythonpath.sh profile script:"
    echo "${pythonpath_profile_script}" > /etc/profile.d/pythonpath.sh
    chown root.root /etc/profile.d/pythonpath.sh
    chmod -v 0644 /etc/profile.d/pythonpath.sh
    source /etc/profile.d/pythonpath.sh
    hash -r
    
  • 그런 다음 다음을 통해 최신 버전의 pip 또는 기타 Python 모듈을 설치하도록 선택할 수 있습니다.

    pip install --upgrade <<PYTHON MODULE NAME>> --ignore-installed --install-option="--prefix=/usr/local" --log /var/log/<<PYTHON MODULE NAME>>-install-$(date "+%Y%m%d%H%M%S").log
    

    예를 들어

    pip install --upgrade pip --ignore-installed --install-option="--prefix=/usr/local" --log /var/log/pip-install-$(date "+%Y%m%d%H%M%S").log
    hash -r
    # Notice the use of `hash -r` to refresh bash's hash table of recently
    # executable programs. Without doing this you may find that the 'pip'
    # command being used is not the version you just installed.
    

/usr/local이렇게 하면 시스템 패키지 관리자가 관리하는 파일을 방해하지 않는 위치 에 요청된 Python 모듈이 설치됩니다 . 이 --ignore-installed옵션은 pip가 모듈의 기존 버전에 닿지 않도록 합니다. 또한 PYTHONPATH 환경 변수를 사용하기 때문에 이러한 /usr/local/lib*/python2.7/site-packages경로는 시스템에 설치된 패키지보다 먼저 사용됩니다. 즉

[root@localhost ~]# python
Python 2.7.5 (default, Sep 15 2016, 22:37:39)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)

/usr/local/lib64/python2.7/site-packages        <---
/usr/local/lib/python2.7/site-packages          <---
/root
/usr/lib64/python27.zip
/usr/lib64/python2.7
/usr/lib64/python2.7/plat-linux2
/usr/lib64/python2.7/lib-tk
/usr/lib64/python2.7/lib-old
/usr/lib64/python2.7/lib-dynload
/usr/lib64/python2.7/site-packages
/usr/lib/python2.7/site-packages
>>>

마지막으로, 적어도 CentOS/RHEL에서 이 /usr/local/bin경로는 PATH 환경 변수의 다른 시스템 바이너리 경로 앞에 있으므로 /usr/local/bin에 설치된 최신 바이너리가 시스템에 설치된 바이너리보다 우선합니다. 즉

[root@localhost ~]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

답변4

여기서 무엇을 해야 하는지에 대한 합의가 이루어졌습니까?

예, 시스템 관리 Python 설치를 수동으로 수정하지 마십시오(pip 실행) - 참조"sudo pip" 실행의 위험은 무엇입니까?이 주제에 대한 심층적인 토론을 보려면 pip 이슈 1668을 읽어보세요.기본값은 --user입니다.및 이와 관련된 기타 문제.

가장 일반적인 솔루션은 다음과 같습니다.

  • 사용자의 홈 디렉터리(사용자 계획)
  • 소스에서 Python을 컴파일하고 시스템 인스턴스 대신 이 인스턴스를 사용합니다.

--target이론적으로 또 다른 가능한 해결책은 pip 옵션을 사용 하고 PYTHONPATH환경 변수를 설정하는 것입니다. 하지만 --target다양한 옵션이 있습니다(현재 12개).질문.

관련 정보