여러 파이썬 버전을 관리하는 올바른 방법은 무엇입니까?


21

Python 2.6이 기본 Python으로 설치된 시스템이 있습니다. 그런 다음 Python 2.7을 설치하고 / usr / bin / python을 수동으로 새 설치의 심볼릭 링크로 만들었습니다.

그런 다음 command-not-found에 문제가 발생했습니다 . 다시 설치하려고합니다.

sudo apt-get remove command-not-found

이 오류가 발생합니다.

/usr/bin/python does not match the
python default version. It must be
reset to point to python2.6

그러나 나는 파이썬 2.7이 기본값이되기를 정말로 원합니다. 이 혼란을 어떻게 해결합니까?

답변:


16

OS에서 기본 Python (또는 Perl 등)을 변경하는 것은 실제로 나쁜 생각입니다. 이 인터프리터는 실제로 OS의 일부이며 해당 버전의 인터프리터와 함께 작동하도록 특별히 작성된 다른 OS 구성 요소가있을 수도 있습니다.

예를 들어 Redhat에서 시스템 소프트웨어 업데이트를 수행하는 yum 도구는 Python 응용 프로그램입니다. 당신은 정말로 이것을 깨고 싶지 않습니다. 이러한 응용 프로그램은 설치 한 버전에없는 특정 비표준 파이썬 모듈이 설치되어있을 수 있습니다. 예를 들어 우분투에서 파이썬으로 작성된 내장 OS 도구 중 일부는 Python 표준 라이브러리의 일부가 아닌 Storm이라는 ORM을 사용한다고 생각합니다. 깨끗한 Python 2.7 설치에 특정 예상 버전의 Storm 모듈이 설치되어 있습니까? Storm 버전이 있습니까? 아니? 그런 다음 OS 덩어리를 깨뜨 렸습니다.

이를 수행하는 올바른 방법은 원하는 Python 버전을 설치하고 .bash_profile, 경로 등을 설정하여 사용하도록 사용자 계정을 설정하는 것입니다. Python 용 virtualenv 모듈을 살펴볼 수도 있습니다.


1
여기 내 길을 찾았습니다. 이 스택에 담당자가 있으면 -1이됩니다. 왜? 제안 된 접근 방식에는 "원하는 버전의 파이썬 설치"만 표시되어 있기 때문입니다. 시스템 파이썬을 밟지 않고 어떻게 합니까?
jez December

@jez 사용자는 응용 프로그램 및 선택한 OS 조합에 대한 설치 지침을 참조해야합니다. 일반적으로 언어 설치 프로그램 패키지는 핵심 OS 구성 요소를 덮어 쓰지 않고 적절한 위치에 설치되므로 OS 버전을 덮어 쓰는 것이 특별한 경우입니다.
Simon Hibbs

8

이 혼란을 어떻게 해결합니까?

재설치 외에는 아무것도 없습니다 python. 변경을 취소합니다 (symlink).

왜 기본값으로 사용 하시겠습니까? 필요할 때마다 (실행 가능한) 스크립트의 시작 부분에 (shebang)을 사용 python2.7하거나 포함 #!/usr/bin/python2.7하십시오.

python2.7시스템 전체 기본값으로 유지 해야한다면 Ubuntu의 이후 릴리스 (현재는 Ubuntu 11.04, 코드 명 Natty)를 사용하십시오. 해당 버전을 기본값으로 사용합니다.

앞으로는 심볼릭 링크 작업과 같은 수동 개입을 피하십시오. 이것은 특히 배포 관리 파일, 특히 Python 설치와 같은 복잡한 짐승에 해당됩니다.


업그레이드 후 기본 파이썬 설치를 변경하는 것이 합리적이라고 생각했습니다. 최신 파이썬으로 작업하고 싶기 때문에 기본값으로 사용하고 싶습니다 ... pythonbash에서 입력 하면 새 파이썬을 얻고 싶습니다. 내가 한 것보다 더 좋은 방법이 있습니까?
ripper234

참고로-파이썬 2.7을 설치하는 방식에 문제가 있다고 생각하지 않습니다. 유일한 "정통"움직임은 심볼릭 링크를 바꾸는 것이 었 습니다 . 이것이 기본 설정 으로 올바른 방법 이라고 생각 했습니다. 더 좋은 방법이 있습니까?
ripper234

2
@ 리퍼 : 나는이 스레드에 조금 늦게 온 것 같아요. Tshepang에 따르면 pythonUbuntu 의 패키지는 시스템 버전을 결정합니다. 이제 파이썬 패키지 등을 만들어 파이썬 2.7을 기본값으로 사용하도록 설치를 사용자 정의 할 수 있지만 그렇다면 우분투 대신 파이썬 설치 관리자가 효과적으로 될 것입니다. 파이썬 방법을 배워야합니다. 데비안 / 우분투에서 관리됩니다. 시스템의 다른 Python 패키지는 기본적으로 2.6에서 작동하도록 구성되므로 다른 항목과는 별도로 파손이 발생할 수 있습니다.
Faheem Mitha

1
@Tshepang : 좋은 요약!
Faheem Mitha

12
@ ripper234 :에서 변경하지 마십시오 /usr/bin. 배포 용으로 예약되어 있습니다. 대신에 /usr/local/bin/python심볼릭 링크를 만드십시오 python2.7. 그런 다음 #!/usr/bin/env python(권장 관용구) python를 사용하고 명령 줄에 입력 하는 스크립트 는 Python 2.7을 실행합니다. 배포판에서 파이썬을 원하는 배포판의 스크립트는 계속 호출 할 수 있습니다 #!/usr/bin/python.
Gilles 'SO- 악한 중지'

2

면책 조항 : 방금 스택 오버플로에 동일한 답변을 게시했습니다.

/programming/2812520/pip-dealing-with-multiple-python-versions/50319252

여기에 문제가 있습니다. Python3에서 작동합니다. 주요 특징은 다음과 같습니다.

  • 각 Python 버전은 소스에서 컴파일됩니다.
  • 모든 버전은 로컬로 설치됩니다
  • 어떤 식 으로든 시스템의 기본 Python 설치를 방해하지 않습니다
  • 각 Python 버전은 virtualenv와 격리됩니다

단계는 다음과 같습니다.

  1. 다른 방법으로 여러 개의 추가 파이썬 버전이 설치되어 있으면 제거하십시오. 예를 들어 $ HOME / .local / lib / python3.x 등을 제거하십시오 (전역 적으로 설치된 버전). 그래도 시스템의 기본 python3 버전을 만지지 마십시오.

  2. 다음 디렉토리 구조에서 다른 Python 버전의 소스를 다운로드하십시오.

    $HOME/
        python_versions/ : download Python-*.tgz packages here and "tar xvf" them.  You'll get directories like this:
          Python-3.4.8/
          Python-3.6.5/
          Python-3.x.y/
          ...
  3. 각 "Python-3.xy /"디렉토리에서 다음을 수행하십시오 (단계에서 "sudo"를 사용 하지 마십시오 !) :

    mkdir root
    ./configure --prefix=$PWD/root 
    make -j 2
    make install
    virtualenv --no-site-packages -p root/bin/python3.x env
  4. "python_versions /"에서 다음과 같은 파일을 작성하십시오.

    env_python3x.bash:
    
    #!/bin/bash
    echo "type deactivate to exit"
    source $HOME/python_versions/Python-3.x.y/env/bin/activate
  5. 이제 python3.x를 선택하려면 언제든지

    source $HOME/python_versions/env_python3x.bash

    virtualenv를 입력

  6. virtualenv에서 원하는 Python 패키지를 설치하십시오.

    pip install --upgrade package_name
  7. virtualenv 및 python 버전을 종료하려면 "deactivate"를 입력하십시오.


0

우리는 Mac과 Ubuntu에 여러 파이썬 배포판을 많이 넣었으며 여기에 내 권장 사항이 있습니다.

  1. 시스템 파이썬을 성가신 상태로 두지 마십시오. 절대 사용하지 마십시오.

  2. 기본 Python 배포가 하나만 필요한 경우 Canopy 를 다운로드하여 설치 하십시오. 설치되면 "시스템 파이썬으로 설정"을 선택한 다음 Canopy의 GUI 패키지 관리자에서 패키지를 설치할 수 있습니다.

    • 캐노피도 함께 상자의 compaitble 밖으로 pip당신이 패키지를 설치 할 수있는 PyPi 패키지 관리자 명령 (예를 들어 pip install python-twitter)
  3. 가상 환경을 사용할 계획이라면 (즉, 파이썬 프로그램을 개발하고 있고 각각을위한 편리한 깨끗한 파이썬 환경을 원하는 방식으로 전환하려는 경우) 가상 환경 관리자 도구 로 인해 Canopy보다 Anaconda를 권장 합니다. 이것은 당신을 할 것입니다

0

pyenv

https://github.com/pyenv/pyenv

Pyenv를 사용하면 Node.js NVMRuby RVM 과 같이 단일 사용자에 대해 sudo없이 여러 Python 버전을 관리 할 수 ​​있습니다 .

Pyenv 설치 :

curl https://pyenv.run | bash

그런 다음에 추가하십시오 .bashrc:

export PATH="${HOME}/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

설치할 Python 버전을 찾으십시오.

pyenv install --list

원하는 파이썬 버전을 설치하십시오.

# Increase the chances that the build will have all dependencies.
# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt build-dep python3
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
  libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
  xz-utils tk-dev libffi-dev liblzma-dev python-openssl git

# Build and install a Python version from source.
pyenv install 3.8.0

사용 가능한 Python 버전을 나열하십시오.

pyenv versions

우리는 지금 :

* system (set by /home/cirsan01/.pyenv/version)
  3.8.0

다른 파이썬 버전을 선택하십시오 :

pyenv global 3.8.0
python --version
python3 --version

두 출력 :

Python 3.8.0

이제 패키지를 정상적으로 설치하고 사용할 수 있습니다.

pip install cowsay
python -c 'import cowsay; cowsay.tux("Python is fun")'
cowsay 'hello'

깨끗한 환경에 모든 것이 로컬로 설치되었음을 확인할 수 있습니다.

python -c 'import cowsay; print(cowsay.__file__)'
which cowsay

프로젝트 별

이전 섹션에서는 전역 설정에서 pyenv를 사용하는 방법을 살펴 보았습니다.

그러나 일반적으로 원하는 것은 프로젝트별로 특정 파이썬 및 패키지 버전을 설정하는 것입니다. 이것이 그것을하는 방법입니다.

먼저 이전과 같이 원하는 Python 버전을 설치하십시오.

그런 다음 프로젝트 디렉토리에서 원하는 파이썬 버전을 다음과 같이 설정하십시오.

pyenv local 3.8.0

.python-version버전 문자열을 포함 하는 파일을 만듭니다 .

이제 프로젝트를 위해 로컬로 패키지를 설치해 봅시다 : TODO : 좋은 방법은 없습니다 : /programming/30407446/pyenv-choose-virtualenv-directory/59267972#59267972

이제 누군가 프로젝트를 사용하려고 할 때 다음을 수행합니다.

pyenv local

파이썬 버전을 올바른 버전으로 설정합니다.

관련 스레드 :

우분투 18.04, pyenv 1.2.15에서 테스트되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.