programing

가상 환경을 이동할 수 있습니까?

minimums 2023. 5. 8. 22:00
반응형

가상 환경을 이동할 수 있습니까?

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

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

이는 단순히 가상 환경의 이름을 변경하는 것과는 다릅니다. 특히 가상 환경에 익숙하지 않은 사용자에게는 더욱 그렇습니다.

가상 환경을 생성하고 다른 폴더로 이동해도 작동합니까?

$ 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에서 할 수 있는지, 아니면 그냥 빨아서 복제해야 하는지 정말 알고 싶습니다.

ㅠㅠㅠㅠmv a virtualenv슬픔 없이 그렇게?저는 슬픔을 피하고 싶습니다.

플랫폼에서 합니다. 같은 플랫폼에서 이동이 가능합니다.사용할 수 있습니다.--relocatable기존 환경에서 사용할 수 있습니다.

--help:

--relocatable -- 기존 가상 환경을 재배치할 수 있도록 만듭니다.이렇게 하면 스크립트가 수정되고 모든 .pth 파일이 상대적으로 됩니다.

그러나, 이것은 그것을 바꾸지 않는 것처럼 보입니다.activate▁the▁changes▁script뿐다,입니▁only만 변경됩니다.pip*그리고.easy_install*대본에서activate 크립트스,$VIRTUAL_ENV 된 environment variable/path/to/original/venv.$VIRTUAL_ENV변수는 다음을 설정하는 데 사용됩니다.PATH당신의 활동적인 환경에서도, 그래서 그것은 전화하기 위해 새로운 위치에 따라 변경되어야 합니다.python그리고.pip절대 경로가 없는 등.

이 문제를 해결하려면 다음을 변경할 수 있습니다.$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

Hooray, 이제 새로 위치한 가상 환경에 물건을 설치하고 로드할 수 있습니다.

3(새로운 Python 3.3+의 )venv내장 모듈)

간단한 답변(버전에 관계없이):

  • 가상 환경을 이동할 수 있는 깨끗하고 직접적인 방법은 없습니다.
  • 재작성하기만 하면 됩니다.


긴 답변:

v3의 Python v3.3 버전virtualenv는 패지가이지기정제본라는 이름의 내장 .venv.

--relocatable은 다른답언옵급에션포않다았니습지에 .venv현재로서는 Python 가상 환경의 이름을 바꾸거나 재배치할 수 있는 안전한 방법이 없습니다.

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

위에 링크된 답변에서 그는 직접 이름 변경이나 이동을 지원할 수 있는 일부 타사 패키지를 언급합니다.했다면 가상 환경을 이동하는 수 .venv뿐만 아니라.

참고: 이 답변에서는 다음에 중점을 둡니다.virtualenv에, 다는보는venv번역 방법은 다음 섹션을 참조하십시오.



venv이전 버전과 비교virtualenv

을 사용하는 venv다음과 같습니다.

python -m venv

뿐만 아니라virtualenv원래 패키지에 명령으로 설치됩니다.파일을 이는 과 같이 할 수 .: "python", "python", "python", "python", "python".

  1. python
  2. py또는py -3.7또는 유사(Python 3.3+용 Python Launcher for Windows 및 Windows용 Python과 함께 번들됨)py리눅스용으로 별도로 설치할 수 있는 패키지 [및 MacOS?])
  3. python3와 3을 으로 설치하는 (python 2 및 3 을 3 로는설치하 Linux 약규한위)
  4. 하십시오. 예: 문가있경는실파실이파절경사다용니합로를대의일행제.c:\program files\python37\python.exe

실행 중인 버전이 확실하지 않으면 언제든지 실행할 수 있습니다.python --version알아내기 위해.



가상 환경을 재생성하는 방법

가상 환경을 생성/재생하는 것은 쉬우며, 가상 환경과 잠시 작업한 후에는 제2의 천성이 되어야 합니다.이 프로세스는 전반부에 스크립트를 패키지로 배포하기 위해 수행한 작업(의존성 포함)과 추가 개발을 위해 스크립트/패키지를 설치하기 위해 수행한 작업을 반영합니다.

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

  1. 사용하다python --version가상 환경이 활성화되어 사용 중인 Python 버전을 확인할 수 있습니다.

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

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

  1. 당신의 새 벤브를 만드세요.

    • venv에 설치할 올바른 버전의 python을 사용하고 있는지 확인합니다.
    • 정확히 동일한 Python 버전을 사용하려면 다음과 같이 하십시오.
      • 이전 venv에서 "python --version"을 입력한 다음 해당 버전의 python 명령을 사용하여 새 venv를 생성해야 합니다.
    • 명령의 새 venv 폴더 항목의 경우:
      • 원하는 최종 폴더 위치에 절대 또는 상대 경로를 추가합니다.
      • 사용하다python -m venv my_new_venv의 새 입니다.my_new_venv폴더를 누릅니다.
      • venv 폴더의 이름은 venv의 이름이 됩니다(Venv가 활성화되면 프롬프트에 표시됨).
  2. 에서 합니다.requirements.txtjava.

    • python -m pip install -r requirements.txt

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

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

  • python -m pip list -v
  • -v또는 "discose" 옵션을 사용하면 설치된 각 패키지에 대한 추가 정보가 추가됩니다.이 기능은 가상, 사용자 및 시스템에 설치된 패키지를 올바르게 유지하는 데 유용합니다.

이 시점에서 이전 venv 폴더와 모든 컨텐츠를 삭제하면 됩니다.이 경우 GUI를 사용할 것을 권장합니다. 파일 삭제는 종종 Linux 명령줄에서 영구적으로 수행되며 작은 오타는 나쁜 소식이 될 수 있습니다.

하지만 아아:

아니요, 당신은 간단히 할 수 없습니다.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슬픔에 잠기다

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

단답:

내가 보로미르가 말하게 해줄게요. 그래야 그가 분명히 말할 수 있어요.

음, 당신은 할 수 없어요.

--relocatable에 대한 인수입니다.virtualenv이 작업을 수행할 수 있습니다.

네, 가능합니다! (인)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. 편집한 배치 파일을 저장하면 끝입니다!

내하고 저장해야 . 고: 내솔션작저합니다야장해참고동하은루다▁note니합야▁should해.windows users환경을 합니다. 에서 이 기능이 작동할지 의문입니다. 다른 운영 체제에서 작동할지 의문입니다..bat에서 왔습니다.MS-DOS

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

그러나 선택할 수 있는 경우에는 새 가상 환경을 생성하고 대신 새 가상 환경을 사용하는 것이 가장 좋습니다.이 방법이 가장 안전하고 나중에 문제가 발생할 가능성이 가장 낮습니다.

설명서에는 다음 사항이 언급되어 있습니다.

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

를 들어, 를 에는 를 실행한 적이 에는 를 실행합니다.setvirtualenvproject실행한 후에는 올바른 디렉터리로 전환할 수 없습니다.workon ...그런 경우에는 수동으로 수정해야 합니다.

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

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

를 한 에.virtualenv --relocatable yourenv당신은 당신의 것을 변경할 것입니다.VIRTUAL_ENV디렉터리를 이동할 때마다 변수를 지정하므로 수동으로 변경하지 않으려면 이 옵션을 사용하십시오.

#!/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

도움이 되길 바랍니다.

기본 환경의 하드 링크 복사본을 만든 다음 이 스크립트를 사용하여 경로를 업데이트하여 가상 환경 간에 대규모 모듈용 스토리지를 공유할 수 있습니다.

cd /opt
cp -al python3.10-ai python3.10-fastai
venv_move python3.10-fastai

첫 번째 인수는 venv의 경로입니다. 모든 니다제가 됩니다.__pycache__그 길 아래에

이전 경로를 검색하고 확인 후 현재 경로로 바꿉니다.그런 다음 활성화 스크립트의 venv 이름에 대해서도 마찬가지입니다.같은 종류의 다른 기계로 옮겨도 잘 작동하는 것 같습니다.

스크립트는 다음에 의존합니다.bash GNU » GNUsed OS은 아닙니다. », Linux 및 Mac OS 및 Windows에서 작동합니다.리눅스가 아닌 사용자를 위해 파이썬으로 다시 작성하는 것이 타당할 것입니다.

#!/bin/bash -eu
venv=${1%/}

find "$venv" -name __pycache__ | xargs rm -rf --

old=`perl -ne '/VIRTUAL_ENV="(.*?)"/ && print "$1\n"' "$venv/bin/activate"`
new=$PWD/$venv

old2="(`basename "$old"`)"
new2="(`basename "$venv"`)"

if [ "$old" = "$new" ]; then
    echo "venv paths are already set correctly to $new"
else
    files=`fgrep -r "$old" "$venv" -l`
    echo "$files"
    echo "Replace $old with $new in the above files?"
    read -p "[yn] ? " YN
    if [ "$YN" = y ]; then
        sed -i "s:$old:$new:g" $files
    fi

    files=`fgrep -r "$old2" "$venv"/bin/activate* -l`
    echo "$files"
    echo "Replace $old2 with $new2 in the above files?"
    read -p "[yn] ? " YN
    if [ "$YN" = y ]; then
        sed -i "s:$old2:$new2:g" $files
    fi
fi

TL;DR

virtualenv-clone 가상 환경 래퍼의 일부로 포함됨

virtualenv-clone /path/to/old/venv /path/to/new/venv

대안적으로

당신은 또한 시도할 수 있습니다.cpvirtualenv

cpvirtualenv /path/to/old/venv /path/to/new/venv

는 "cpvirtualenv"를 합니다./path/to/old/venv내에존는 내부에 $WORKON_HOME그렇지 않으면 실패합니다.이 전화가 걸려온 이후로virtualenv-clone당신은 그것을 대신 사용하는 것이 좋습니다; 같은 오류를 피하기 위해.

mark@Desktop:~/venvs$ cpvirtualenv ./random/ $WORKON_HOME/random
Copying random as /home/mark/.virtualenvs/venvs/random...
Usage: virtualenv-clone [options] /path/to/existing/venv /path/to/cloned/venv

virtualenv-clone: error: src dir '/home/mark/.virtualenvs/venvs/random' does not exist

virtualenvrapper 설명서

가상 환경 복사는 잘 지원되지 않습니다.각 가상 환경에는 하드 코딩된 경로 정보가 있으며, 복사 코드가 특정 파일을 업데이트해야 한다는 것을 모르는 경우가 있을 수 있습니다.주의하여 사용하십시오.

가상 환경 클론 PyPi 페이지에 따르면 실제로 어떤 역할을 합니까?

재배치할 수 없는 가상 환경을 복제하기 위한 스크립트입니다.

Virtualenv는 원하는 대로 복사할 수 있는 Virtualenv의 재배치 가능한 방법을 제공합니다.그러나 이러한 방식으로 가상 환경을 재배치할 수 있도록 하면 가상 환경의 패키지가 없는 격리는 물론 상대 경로 및 /usr/bin/enveshbang과 함께 제공되는 다른 측면도 파괴됩니다.

또한 .pth 및 .egg-link 다시 쓰기가 의도한 대로 작동하지 않는 것 같습니다.이는 이러한 문제를 해결하고 기존 가상 환경을 쉽게 복제할 수 있는 방법을 제공합니다.

다음을 수행합니다.

sys.argv[1] dir를 sys.argv[2]에 복사합니다.

활성화 스크립트의 하드코드된 가상_ENV 변수를 새 재배치 위치로 업데이트합니다. (--replocable은 이에 해당하지 않습니다.)

이전 Python을 가리키는 경우 bin에 있는 다양한 스크립트의 shebang을 새 Python으로 업데이트합니다.(버전 번호는 그대로 유지됩니다.)

또한 /usr/bin/envython shebangs도 절대적으로 변경할 수 있지만 이 기능은 현재 노출되지 않습니다.

복제된 가상 환경의 sys.path를 확인하고 이전 환경의 경로가 있으면 새 환경에 있는 sys.path 내의 .pth 또는 .vmx 링크 파일을 찾아서 이전 환경에 대한 모든 절대 경로가 새 환경으로 업데이트되었는지 확인합니다.

마지막으로 sys.path를 다시 두 번 확인하고 이전 환경의 경로가 여전히 존재할 경우 실패합니다.

참고: 이 스크립트에는 Python 2.7 또는 3.4+가 필요합니다.

언급URL : https://stackoverflow.com/questions/32407365/can-i-move-a-virtualenv

반응형