[python] virtualenv를 이동할 수 있습니까?

이 질문은 중복되지 않습니다.

가상 환경의 이름바꾸는 것뿐만 아니라 실제로 다른 사용자의 디렉터리를 포함하여 다른 디렉터리 로 실제로 이동 하는 것과 관련이 있습니다.

이것은 단순히 가상 환경, 특히 virtualenv에 익숙하지 않은 사람들의 이름을 바꾸는 것과는 다릅니다.

virtualenv를 만들고 다른 폴더로 이동해도 여전히 작동합니까?

$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $

… 그날 이후에 가상 환경이 이동했습니다 …

(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/

질문:

작동할까요?

$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas

나는 이것을 시도하는 지혜에 대한 질문이 아니라 (물론 지혜가 유머러스하지 않는 한) 그것이 가능한지에 대해 더 많이 의미합니다. 파이썬 3에서 할 수 있는지, 아니면 그냥 빨아서 복제 해야하는지 정말 알고 싶습니다 .

수 나는 단지 슬픔이없는 그런? 나는 슬픔을 피하고 싶다.mvvirtualenv



답변

예. 동일한 플랫폼에서 이동할 수 있습니다. 당신이 사용할 수있는--relocatable기존 환경에서 .

에서 --help:

–relocatable-기존 virtualenv 환경을 재배치 가능하게 만듭니다. 이것은 스크립트를 수정하고 모든 .pth 파일을 상대적으로 만듭니다.

그러나 이것은 activate스크립트 를 변경하는 것처럼 보이지 않으며 오히려 pip*easy_install*스크립트 만 변경합니다 . 에서 activate스크립트의 $VIRTUAL_ENV환경 변수는 원본과 하드 코딩 /path/to/original/venv. $VIRTUAL_ENV변수가 설정하는 데 사용되는 PATH이 새로운 위치에 따라 변경해야합니다 그래서 전화를하기 위해 너무 활성 환경을 pythonpip 등 절대 경로없이.

이 문제를 해결하기 위해 스크립트 $VIRTUAL_ENV에서 환경 변수를 변경할 수 있습니다 activate(예 :sed ). 모든 것이 잘되어야합니다.

사용 예 :

$ cd ~/first
$ virtualenv my-venv
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate
VIRTUAL_ENV="/home/username/first/my-venv"
$ virtualenv --relocatable my-venv
Making script my-venv/bin/easy_install relative
Making script my-venv/bin/easy_install-2.7 relative
Making script my-venv/bin/pip relative
Making script my-venv/bin/pip2 relative
Making script my-venv/bin/pip2.7 relative
### Note that `activate` has not been touched
$ mkdir ~/second
$ mv my-venv ~/second
$ cd ~/second
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate
VIRTUAL_ENV=/home/username/first/my-venv
### (This variable hasn't been changed, it still refers to the old, now non-existent directory!)
$ sed -i -e 's|username/first|username/second|' my-venv/bin/activate
## sed can be used to change the path.
## Note that the `-i` (in place) flag won't work on all machines. 
$ source my-venv/bin/activate
(my-venv) $ pip install foass
...
(my-venv) $ python
[...]
> import foass

만세, 이제 사물을 설치하고 새로 배치 된 가상 환경에로드 할 수 있습니다.


답변

Python 3.3 이상 (새로운 venv 내장 모듈 포함)

단답형 (버전에 관계 없음) :

  • 가상 환경을 이동하는 깔끔하고 직접적인 방법은 없습니다.
  • 그냥 재창조, 쉽습니다 !!


긴 답변 :

Python v3.3부터는 virtualenv이름이 내장 된 모듈이되었습니다.venv .

--relocatable다른 답변에서 언급 된 옵션에 포함되지 않은 venv, 현재 좋은, 나도 이름을 변경하려면 알고 있어요 또는 파이썬 가상 환경을 재배치하는 것이 안전한 방법이 없습니다.

그러나 현재 설치된 모든 패키지를 사용하여 가상 환경을 간단하게 다시 만드는 매우 간단한 방법이 있습니다. 이 답변을 참조 하거나 가상 환경 재생성에 대한 정보는 아래 섹션을 참조하십시오. 프로세스 중에 원하는 위치와 이름으로 새 환경을 다시 만들 수 있습니다. 또는 프로세스는 아래 섹션을 참조하십시오.

그 대답에서 그는 직접 이름 변경이나 이동을 지원할 수있는 몇 가지 타사 패키지를 언급합니다. 가상 환경을 그대로 이동하는 방법을 추구하는 데 만족한다면venv 에서도 있습니다.

참고 : 그 대답에서,이에 집중 virtualenv하기보다는 venv. 번역 방법은 아래를 참조하세요.


venv이전 virtualenv명령 구문 과 비교

사용할 명령 venv은 다음과 같습니다.

python -m venv

대신 virtualenv원래 패키지에 명령으로 설치됩니다. 그러나 “python”은 파이썬 실행 파일을 실행하는 것을 의미하며, 다음과 같은 다양한 것일 수 있습니다.

  1. python
  2. py또는 py -3.7유사 ( Windows 용 Python Launcher 3.3 이상 및 Windows 용 )
  3. python3 (Python 2 및 3을 이중 설치하는 Linux 환경에 대한 규칙)
  4. 문제가있는 경우 실행하려는 python 실행 파일의 절대 경로를 사용하십시오. 예 : c:\program files\python37\python.exe

실행중인 버전이 확실하지 않은 경우 언제든지 확인할 수 있습니다 python --version.


가상 환경을 다시 만드는 방법

가상 환경을 생성 / 재창조하는 것은 쉬우 며 잠시 작업 한 후에는 자연 스러워야합니다. 이 프로세스는 전반에 스크립트를 패키지 (종속성 포함)로 배포하기 위해 수행 할 작업과 추가 개발을 위해 스크립트 / 패키지를 설치하기 위해 수행 할 작업을 반영합니다.

먼저 가상 환경에있는 항목의 업데이트 된 목록을 가져옵니다. 활성화 된 상태에서 사용하는 Python 버전을 가져오고 종속성 목록을 파일에 저장합니다.

  1. python --version활성화 된 가상 환경과 함께 사용 하여 사용중인 Python 버전을 확인합니다.

    • 이는 명확성을위한 것입니다. 다양한 이유로 Python 버전을 최소한 최신 패치 버전으로 업데이트 할 수 있습니다.
    • 예를 들어 기존 venv가 Python v3.7.4를 사용하고 있지만 지금은 v3.7.6이 나오지 않는 경우-대신 v3.7.6을 사용하십시오. 여기에는 비파괴 보안 및 버그 수정 만 포함되어야합니다.
  2. 사용하여 python -m pip freeze > requirements.txt현재 패키지 종속성의 목록을 작성하고에 넣어 requirements.txt파일. 이 명령은 Linux 또는 Git Bash에서 확실히 작동합니다. Windows의 Powershell 또는 명령 줄에 대해 100 % 확신하지는 않습니다.

이제 새 가상 환경을 만든 다음 이전 환경의 종속성을 추가합니다.

  1. 새로운 venv를 만드십시오.

    • venv에 설치하려는 올바른 버전의 Python을 사용하고 있는지 확인하십시오.
    • 정확히 동일한 Python 버전을 원하면 :
      • 현재 가상 환경 (활성화 된 상태)에서 직접 Python을 실행 python하고 명령으로 사용 하십시오.
      • 또는 python.exe가상 환경 폴더에서 절대 경로를 사용하십시오.
    • 명령의 새 venv 폴더 항목의 경우 :
      • 원하는 최종 폴더 위치에 절대 또는 상대 경로를 추가하십시오.
      • python -m venv my_new_venvmy_new_venv폴더 의 현재 작업 디렉터리에 새 가상 환경을 만드는 데 사용 합니다.
      • venv 폴더의 이름은 venv의 이름이됩니다 (활성화 될 때 프롬프트에 표시되는 내용).
  2. requirements.txt파일 에서 종속성을 설치하십시오 .

    • python -m pip install -r requirements.txt

개발 모드에있는 로컬 패키지를 다시 설치해야 할 수 있습니다.

패키지가 설치된 특정 위치를 확인해야하는 경우 다음을 사용하십시오.

  • python -m pip list -v
  • -v또는 “상세”옵션이 설치되어있는 경로를 포함하여 설치된 각 패키지에 대한 몇 가지 추가 정보를 추가 할 것입니다. 이것은 바로 당신이 유지 가상, 사용자 및 시스템 설치 패키지를 만들 때 유용합니다.

이 시점에서 이전 venv 폴더와 모든 내용을 삭제할 수 있습니다. 이를 위해 GUI를 사용하는 것이 좋습니다. 파일 삭제는 종종 Linux 명령 줄에서 영구적이며 작은 오타는 나쁜 소식이 될 수 있습니다.


답변

이 작업을 수행 할 수 있는 --relocatable인수가 virtualenv나타납니다.


답변

그러나 ALAS :

아니요, 단순히 mv. 해결 방법이 있지만 다시 설치하는 것이 더 쉬울 수 있습니다.

(my-python-venv)$ /home/me/PeskyPartyPEnvs/pip3 install foaas
zsh: /home/me/PeskyPartyPEnvs/pip3: bad interpreter: /home/me/Env/my-python-venv/bin/python3: no such file or directory
(my-python-venv)$ deactivate
$

enter좌절감이 많이 들며 다음 작품

$
$
$ pip3 search foaas

제외하고는 my-python-venv ergo 슬픔입니다.

원하십니까 mv당신의virtualenv , 그렇지 않으면 수정되지 않은, 그리고 그것을 사용?

짧은 답변:

나는 Boromir가 그것을 말하게 할 것입니다.

글쎄, 당신 은 할 수 없습니다 .


답변

예, virtualenv의 현재 디렉토리에 의존하는 작업을 수행하지 않은 경우 가능합니다.

그러나 선택할 수있는 경우 가장 좋은 방법은 새 virtualenv를 만들고 대신 새 virtualenv를 사용하는 것입니다. 이것은 가장 안전한 선택이며 나중에 문제를 일으킬 가능성이 가장 적습니다.

문서 에는 다음과 같이 언급되어 있습니다 .

각 virtualenv에는 하드 코딩 된 경로 정보가 있습니다.

예를 들어 실행 setvirtualenvproject한 경우 실행 한 후 올바른 디렉터리로 전환 할 workon ...수 없으므로이 경우 수동으로 수정해야합니다.

일반적으로 virtualenv는 필요한 Python 인터프리터 파일과 필요한 패키지가있는 디렉토리에 불과합니다.


답변

이에 대한 답변과 유사한 주제에 대한 다른 스레드를 사용 하여 virtualenv 디렉토리 자체에서 찾아서 실행하는 bash 스크립트를 만들었습니다.이 스크립트는 virtualenv 이동에 도움이됩니다.

수행 한 후 virtualenv --relocatable yourenv당신이 당신의 변경해야합니다 VIRTUAL_ENV수동으로 변경 wan’t하지 않도록 경우, 변수는 디렉토리를 이동할 때마다,이를 사용합니다.

#!/bin/bash \n 
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
EXISTING=$(grep 'VIRTUAL_ENV=' bin/activate)
NEWDIR=VIRTUAL_ENV=\"$DIR\"
sed -i -e "s|$EXISTING|$NEWDIR|" bin/activate
source bin/activate

도움이되기를 바랍니다.


답변

그래 넌 할수있어! (에windows )

해결 방법은 간단합니다. 가상 환경을 어디로 든 이동 한 다음 activate.bat내부에서 편집하면 됩니다 scripts\.

  1. 가상 환경에서 원하는 디렉토리로 이동

  2. 마우스 오른쪽 버튼으로 클릭하고 편집 activate.bat에 있습니다 venv_folder\scripts.

  3. 다음 VIRTUAL_ENV에서 변수 변경 :

     set VIRTUAL_ENV=C:\old_directory\venv_name
    

    으로

     set VIRTUAL_ENV=C:\new_directory\venv_name
    
  4. 편집 한 배치 파일을 저장하면 끝입니다!

참고 : 내 솔루션이 작동하고 windows users새 가상 환경 설정을 저장해야 합니다. 다른 운영 체제에서도 작동하지 않을 것 .bat입니다.MS-DOS