virtualenv에서 파이썬 업그레이드


206

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

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

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


2
일부 경로 등을 수정하여 작동시킬 수 있습니다. 마지막으로 원하는 것은 프로덕션 환경과 약간 다릅니다. 생각 해보세요. 다양한 버전이 어떻게 컴파일되는지간에 하나의 차이점이 있다면 버그를 추적함으로써 시간을 절약 할 수 있습니다. 새로운 virtualenv를 만들고 모든 것을 다시 설치하는 데 시간이 걸립니다.
Sam Dolan

@ 시몬 워커. 정확히 같은 문제입니다. 버그 수정을 위해 Python 3.5.3을 업그레이드해야합니다.
Mohammed Shareef C

답변:


77

이거 봤어 ? 그 답을 오해하지 않았다면, 이전의 것 위에 새로운 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)).


13
그는 가능하면 어떤 패키지도 다시 설치하고 싶지 않았습니다. 중요한 이유를 모르는 경우 소스에서 numpy를 설치하지 않은 것이 분명합니다.) 힌트 : LOOOOOOOOOOOOOOO 시간이 걸립니다.
Antti Haapala 2016 년

네, 이해합니다 그러나 그가 virtualenv를 다른 것의 상단에 만들면 패키지가 손실되지 않으므로 numpy 또는 다른 패키지를 다시 설치할 필요가 없습니다. 그럼에도 불구하고, 나는 그것이 실패 할 경우에 새로운 virtualenv에서 이것을 시도해야한다고 생각합니다.
marianobianchi

필자의 경우는 새로운 virtualenv 버전이 실제로 업그레이드되어 있다고 생각하지만 이전 버전의 경우 python 실행 파일을 덮어 쓰지 않아 적어도 하나의 python bugfix 릴리스에 문제가 발생했습니다.
Antti Haapala 2016 년

4
그것은 나를 위해 작동하지 않았고 그것이 아닌 것으로 보인다 : github.com/pypa/virtualenv/issues/437
Kentzo

1
나는 새를 만들려고 virtualenv예전의 상단에, 그리고 일을. -p올바른 버전의 파이썬을 가리 키 도록 지정해야 했습니다.
osa

76

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

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

python3 -m venv --upgrade ENV_DIR

1
불행히도 이것은 Ubuntu 16.04에서 작동하지 않으며 venv"virtualv를 사용할 수 있습니다"라는 기반으로 파산 하여 수정을 거부합니다. 편집 : 실제로, 작동합니다! "ensurepip"에 대한 오류 메시지도 표시합니다.
rspeer

2
내 시스템에서 python을 3.5.1에서 3.6.4로 업그레이드했습니다. 그리고 virtualenv에서 파이썬을 업그레이드하려면 다음 명령에서 python3.6을 명시 적으로 언급해야했습니다.python3.6 -m venv --upgrade <path_of_existing_env>
Sarfraaz Ahmed

1
내 경우, bin/python그리고 bin/python3여전히 이전에 링크 된 python3.4바이너리, 그리고 수동으로 링크를 설정했다. 또한, 오래된 구식 파이썬 버전 을 제거 하는 방법이 있습니까?
Jens

4
나는 Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.무엇을 의미합니까? 활성 파이썬 프로세스가 없으며 업그레이드 할 수 없습니다.
user305883

1
@ user305883 시스템 Python 버전을 3.5에서 3.6으로 업그레이드하고 3.5를 제거한 후에 비슷한 오류가 발생했습니다. 3.5를 다시 설치하고 작동시켜야 python3.6 -m venv --upgrade ENV_DIR했습니다. 에있는 일부 심볼릭 링크를 계속 업데이트해야한다고 생각 ENV_DIR/bin합니다. 따라서 트릭은 이전 버전이 여전히 설치되어있는 동안 Python 버전 으로 업데이트하는 것이 었습니다.
AstroFloyd 2019

24

다시 업데이트 : 다음 방법은 최신 버전의 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

내가 삭제해야 할 유일한 파일은 bin/python파일이었습니다.
코엔.

일부 이전 버전의 Python에서는 삭제 setuptools하고 pip필요합니다.
Rockallite

1
또한 <EXISTING_ENV_PATH>/.Pythonvirtualenv 생성이 중단 되어 삭제해야했습니다 .
Kiran Jonnalagadda

2
이 답변을 바탕으로 나는 작은 스크립트 (전체 속성)를 썼습니다 : burgundywall.com/post/update-all-python-virtual-environments
Kurt

당신은 실제로 쉽게 실행하여 가상 환경을 제거 할 수 있습니다 rmvirtualenv <env_name>더에서 모든 줄을 종속 : 참조를 제거합니다 : virtualenvwrapper.readthedocs.io/en/latest/...
닉 루카스에게

7

이전 버전 위에 새로운 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에 저장합니다.

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


1
대부분의 사람들은 작업을 수행하기 위해 pip 기계를 사용하는 것이 합리적이라고 생각하지만 virtualenvs postactivate, predeactivate 등을 사용자 정의 한 모든 사람은 손실되고 수동으로 읽어야하기 때문에 바람직한 옵션이 아닙니다.
dpwrussell

6

기존 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을 여는 것을 고려할 것 입니다.


1
예, 부탁합니다. 나는 이것을 반쯤 겪고 큰 문제를 겪었다 ... 일단 현재 단계에서 삭제 된 첫 번째 단계는 되돌릴 수 없기 때문에 점검이 좋을 것이다
chris Frisina

2

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

# 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

에서 가져온 :


1

홈 디렉토리를 한 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를 실행할 수있었습니다.


1

Homebrew를 사용하여 Python3을 설치하고 업그레이드하는 OS X 또는 macOS에서 python -m venv --upgrade ENV_DIR작동 하기 전에 기호 링크를 삭제해야 했습니다.

나는 upgrade_python3.sh에 다음을 저장 했으므로 다시해야 할 때 몇 개월이 지난 지금을 기억할 것입니다.

brew upgrade python3
find ~/.virtualenvs/ -type l -delete
find ~/.virtualenvs/ -type d -mindepth 1 -maxdepth 1 -exec python3 -m venv --upgrade "{}" \;

업데이트 : 처음에는 잘 작동하는 것처럼 보였지만 py.test를 실행하면 오류가 발생했습니다. 결국 요구 사항 파일에서 환경을 다시 만들었습니다.


py.test`~ / .virtualenvs / myenv / bin / python3.7은 심볼릭 링크가 아니기 때문에 작동하지 않으므로 업데이트되지 않습니다.
Ash Berlin-Taylor

아, 실제로 문제는 ~/.virtualenvs/myenv/.Python심볼릭 링크 가 있다는 것입니다.
Ash Berlin-Taylor

1

을 사용하는 경우 환경을 제대로 pipenv업그레이드 할 수 있는지 모르겠지만 최소한 마이너 버전 업그레이드의 경우 새 환경을 만들 때 처음부터 패키지를 다시 작성하지 않는 것이 현명한 것 같습니다. 예를 들어 3.6.4에서 3.6.5로 :

$ pipenv --python 3.6.5 install
Virtualenv already exists!
Removing existing virtualenv
Creating a v$ pipenv --python 3.6.5 install
Virtualenv already exists!
Removing existing virtualenv
Creating a virtualenv for this project
Using /usr/local/bin/python3.6m (3.6.5) to create virtualenv
Running virtualenv with interpreter /usr/local/bin/python3.6m
Using base prefix '/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/python3.6
Also creating executable in /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD
Installing dependencies from Pipfile.lock (84dd0e)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 47/47  00:00:24
To activate this project's virtualenv, run the following:
 $ pipenv shell
$ pipenv shell
Spawning environment shell (/bin/bash). Use 'exit' to leave.
. /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/activate
bash-3.2$ . /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/activate
(autoscale-aBUhewiD) bash-3.2$ python
Python 3.6.5 (default, Mar 30 2018, 06:41:53) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>>

대박! 이 보석을 주셔서 감사합니다
Mayur 파틸

1

나는 대답 중 일부는 참조 venv하고 다른 것은 참조하기 때문에 명확히하고 싶습니다 virtualenv.

의 사용 -p또는 --python플래그에 대한 지원 virtualenv,하지만에 venv. 둘 이상의 Python 버전이 있고 사용할 버전을 지정하려면 다음 venv과 같이 명령 행에서 수행하십시오.

malikarumi@Tetuoan2:~/Projects$ python3.6 -m venv {path to pre-existing dir you want venv in}

물론 venv다른 사람들이 지적한 것처럼 업그레이드 할 수는 있지만 venv, 처음에 그것을 생성하는 데 사용 된 Python을 이미 업그레이드했다고 가정합니다 . 아직 시스템에없는 Python 버전으로 업그레이드 할 수 없으므로 원하는 버전을 먼저 구한 다음 원하는 모든 venv를 만드십시오.


1

1 단계 : 요구 사항 고정 및 기존 환경 백업

pip freeze > requirements.txt
deactivate
mv env env_old

2 단계 : Python 3.7 설치 및 가상 환경 활성화

sudo apt-get install python3.7-venv
python3.7 -m venv env
source env/bin/activate
python --version

3 단계 : 요구 사항 설치

sudo apt-get install python3.7-dev
pip3 install -r requirements.txt

0

문제가있는 모든 사람

오류 : '['/ Users / me / Sites / site / venv3 / bin / python3 ','-Im ','ensurepip ','--upgrade ','--default-pip ']'명령이 0이 아닌 값을 반환했습니다. 종료 상태

python3.6-venv를 설치해야합니다

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