[python] virtualenv에서 파이썬 업그레이드

virtualenv에서 사용되는 python 버전을 업그레이드하는 방법이 있습니까 (예 : 버그 수정 릴리스가 나오는 경우)?

pip freeze --local > requirements.txt그런 다음 디렉토리를 제거 할 수는 pip install -r requirements.txt있지만, 예를 들어 큰 라이브러리를 많이 다시 설치해야합니다 numpy.

예를 들어 2.6-> 2.7에서 업그레이드 할 때 이점이 있음을 알 수 있지만 2.7.x-> 2.7.y는 어떻습니까?



답변

이거 봤어 ? 그 답을 오해하지 않았다면, 이전의 것 위에 새로운 virtualenv를 만들려고 시도 할 수 있습니다. 어떤 파이썬이 virtualenv를 사용할지 알아야합니다 (virtuenv 버전을 볼 필요가 있습니다).

virtualenv가 이전 버전의 동일한 Python 버전으로 설치되어 있고 virtualenv 패키지 업그레이드가 옵션이 아닌 경우 원하는 Python 버전으로 virtualenv를 설치하기 위해이 내용을 읽으십시오 .

편집하다

나는이 접근법 (이전 접근법 위에 새로운 virtualenv를 생성하는 방법)을 테스트했으며 나에게 잘 작동했습니다. 파이썬 2.6에서 2.7로 또는 2.7로 또는 2.7로 3.x로 변경하면 약간의 문제가있을 수 있지만 동일한 버전 (원하는대로 2.7에 머물러 있음)으로 업그레이드하면 모든 패키지와 같이 아무런 문제가 없습니다. 파이썬 버전 (2.7.x 및 2.7.y 패키지는 your_env / lib / python2.7 /에 있습니다)에 대해 동일한 폴더에 있습니다.

virtualenv python 버전을 변경하는 경우 해당 버전의 모든 패키지를 다시 설치해야합니다 (또는 필요한 패키지를 새 버전 패키지 폴더에 연결하십시오 (예 : your_env / lib / python_newversion / site-packages)).


답변

Python 3.3 이상과 함께 제공되는 venv 모듈을 사용하는 경우 --upgrade옵션을 지원합니다 . 문서 당 :

Python이 현재 위치에서 업그레이드되었다고 가정하면이 버전의 Python을 사용하도록 환경 디렉토리를 업그레이드하십시오.

python3 -m venv --upgrade ENV_DIR


답변

다시 업데이트 :
다음 방법은 최신 버전의 virtualenv에서 작동하지 않을 수 있습니다. 이전 virtualenv를 수정하기 전에 종속성을 요구 사항 파일 (pip freeze > requirements.txt)에 저장하고다른 곳에서 백업해야합니다. 문제가 발생하더라도 여전히 새 virtualenv를 작성하고 그 안에 이전 종속성을 설치할 수 있습니다 (pip install -r requirements.txt).

업데이트 됨 : 원래 답변한지 5 개월 후에 답변을 변경했습니다. 다음과 같은 방법이 더 편리하고 강력합니다.

부작용 : 또한Python을 v2.7.8로 업그레이드 한 후 가상 환경에서Symbol not found: _SSLv2_method수행 할 때 예외를수정합니다import ssl.

주의 : 현재 이것은 Python 2.7.x 전용 입니다.


OS X에서 Homebrew Python을 사용하는 경우 먼저 deactivate모든 virtualenv를 사용하고 Python을 업그레이드하십시오.

brew update && brew upgrade python

다음 명령을 실행하십시오 ( <EXISTING_ENV_PATH>가상 환경의 경로 임).

cd <EXISTING_ENV_PATH>
rm .Python
rm bin/pip{,2,2.7}
rm bin/python{,2,2.7}
rm -r include/python2.7
rm lib/python2.7/*
rm -r lib/python2.7/distutils
rm lib/python2.7/site-packages/easy_install.*
rm -r lib/python2.7/site-packages/pip
rm -r lib/python2.7/site-packages/pip-*.dist-info
rm -r lib/python2.7/site-packages/setuptools
rm -r lib/python2.7/site-packages/setuptools-*.dist-info

마지막으로 가상 환경을 다시 만듭니다.

virtualenv <EXISTING_ENV_PATH>

이렇게하면 오래된 Python 코어 파일과 표준 라이브러리 (+ setuptoolspip)가 제거되고 설치된 site-packagesPython은 순수 Python에있는 즉시 보존되고 작동합니다. 이진 라이브러리를 다시 설치해야 할 수도 있고 제대로 작동하지 않을 수도 있습니다.

이것은 Django가 설치된 5 개의 가상 환경에서 효과적이었습니다.

BTW, ./manage.py compilemessages나중에 작동하지 않으면 다음을 시도하십시오.

brew install gettext && brew link gettext --force


답변

이전 버전 위에 새로운 virtualenv를 만들 수 없었습니다. 그러나 pip에는 툴을 사용하여 요구 사항을 새로운 venv에 훨씬 빠르게 다시 설치할 수 있습니다. Pip은 requirements.txt의 각 항목을 휠 패키지로 만들어 로컬 캐시에 저장할 수 있습니다. 새 venv를 생성하고 pip install을 실행하면 pip는 미리 만들어진 바퀴를 찾으면 자동으로 사용합니다. 휠은 각 모듈에 대해 setup.py를 실행하는 것보다 훨씬 빠르게 설치됩니다.

내 ~ / .pip / pip.conf는 다음과 같습니다.

[global]
download-cache = /Users/me/.pip/download-cache
find-links =
/Users/me/.pip/wheels/

[wheel]
wheel-dir = /Users/me/.pip/wheels

휠 ( pip install wheel)을 설치 한 다음을 실행 pip wheel -r requirements.txt합니다. 이것은 내 바퀴를 pip.conf의 wheel-dir에 저장합니다.

그때부터, 나는 이러한 요구 사항 중 하나를 핍 설치 할 때마다 바퀴에서 요구 사항을 설치합니다. 매우 빠릅니다.


답변

기존 virtualenvwrapper 프로젝트의 Python 버전을 업그레이드하고 동일한 이름을 유지하는 방법

기존 답변이 저에게 도움이되지 않았기 때문에 Doug Hellmann의 우수한 가상 엔 클래퍼를 사용하는 사람에게 답변을 추가하고 있습니다.

일부 상황 :

  • 파이썬 2 인 프로젝트와 파이썬 3 인 프로젝트를 연구하고 있습니다. 사용하고 싶지만 python3 -m venvPython 2 환경을 지원하지 않습니다.
  • 새 프로젝트를 시작할 때 mkproject가상 환경을 만들고 빈 프로젝트 디렉토리를 만들고 CD를 사용합니다.
  • workonPython 버전에 관계없이 virtualenvwrapper의 명령 을 계속 사용하여 프로젝트를 활성화 하고 싶습니다.

지도:

기존 프로젝트의 이름이 지정 foo되었고 현재 Python 2 ( mkproject -p python2 foo)를 실행하고 있다고 가정 하지만 명령은 2.x에서 3.x로, 3.6.0에서 3.6.1로 업그레이드하는지 여부는 동일합니다. 현재 활성화 된 가상 환경 내부에 있습니다.

1. 이전 가상 환경을 비활성화하고 제거하십시오.

$ deactivate
$ rmvirtualenv foo

후크에 사용자 정의 명령을 추가 한 경우 (예 🙂 bin/postactivate환경을 제거하기 전에 해당 명령 을 저장해야합니다.

2. 임시 디렉토리에 실제 프로젝트를 저장하십시오.

$ cd ..
$ mv foo foo-tmp

3. 새로운 가상 환경 (및 프로젝트 디렉토리)을 생성하고 활성화합니다 :

$ mkproject -p python3 foo

4. 빈 생성 된 프로젝트 디렉토리를 실제 프로젝트로 바꾸고 프로젝트 디렉토리로 다시 변경하십시오.

$ cd ..
$ mv -f foo-tmp foo
$ cdproject

5. 종속성을 다시 설치하고 새 Python 버전 등을 확인하십시오.

$ pip install -r requirements.txt
$ python --version

이것이 일반적인 사용 사례라면 $ upgradevirtualenv/ $ upgradeprojectvirtualenvwrapper 와 같은 것을 추가하기 위해 PR을 여는 것을 고려할 것 입니다.


답변

이 방법은 항상 저에게 효과적입니다.

# First of all, delete all broken links. Replace  my_project_name` to your virtual env name
find ~/.virtualenvs/my_project_name/ -type l -delete
# Then create new links to the current Python version
virtualenv ~/.virtualenvs/my_project_name/
# It's it. Just repeat for each virtualenv located in ~/.virtualenvs

에서 가져온 :


답변

홈 디렉토리를 한 Mac에서 다른 Mac으로 (Mountain Lion에서 Yosemite로) 이전 랩톱을 잃어 버릴 때까지 깨진 virtualenv에 대해 알지 못했습니다. 나는 virtualenv가 Python 2.7을 설치 brew하고 Yosemite가 Python 2.7과 함께 제공된 이후 virtualenv를 시스템 파이썬으로 업데이트하고 싶었습니다. virtualenv기존 디렉토리 위에서 실행했을 때 OSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'오류 가 발생했습니다. 시행 착오를 통해 몇 가지 링크를 제거하고 더 수동으로 수정 하여이 문제를 해결했습니다. 이것은 내가 마침내 한 일입니다 (@Rockalite와 비슷하지만 더 간단합니다).

cd <virtualenv-root>
rm lib/python2.7/config
rm lib/python2.7/lib-dynload
rm include/python2.7
rm .Python
cd lib/python2.7
gfind . -type l -xtype l | while read f; do ln -s -f /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/${f#./} $f; done

그 후에 기존 디렉토리 위에서 virtualenv를 실행할 수있었습니다.