가상 환경을 이동할 수 있습니까?
이 질문은 중복되지 않습니다.
이는 가상 환경의 이름을 변경하는 것뿐만 아니라 다른 사용자의 디렉토리를 포함하여 가상 환경을 다른 디렉토리로 실제로 이동하는 것과 관련이 있습니다.
이는 단순히 가상 환경의 이름을 변경하는 것과는 다릅니다. 특히 가상 환경에 익숙하지 않은 사용자에게는 더욱 그렇습니다.
가상 환경을 생성하고 다른 폴더로 이동해도 작동합니까?
$ 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".
python
py
또는py -3.7
또는 유사(Python 3.3+용 Python Launcher for Windows 및 Windows용 Python과 함께 번들됨)py
리눅스용으로 별도로 설치할 수 있는 패키지 [및 MacOS?])python3
와 3을 으로 설치하는 (python 2 및 3 을 3 로는설치하 Linux 약규한위)- 하십시오. 예: 문가있경는실파실이파절경사다용니합로를대의일행제.
c:\program files\python37\python.exe
실행 중인 버전이 확실하지 않으면 언제든지 실행할 수 있습니다.python --version
알아내기 위해.
가상 환경을 재생성하는 방법
가상 환경을 생성/재생하는 것은 쉬우며, 가상 환경과 잠시 작업한 후에는 제2의 천성이 되어야 합니다.이 프로세스는 전반부에 스크립트를 패키지로 배포하기 위해 수행한 작업(의존성 포함)과 추가 개발을 위해 스크립트/패키지를 설치하기 위해 수행한 작업을 반영합니다.
먼저 가상 환경의 업데이트된 목록을 가져옵니다.활성화된 상태에서 사용하는 Python 버전을 가져오고 종속성 목록을 파일에 저장합니다.
사용하다
python --version
가상 환경이 활성화되어 사용 중인 Python 버전을 확인할 수 있습니다.- 이는 명확성을 위해 - 다양한 이유로 파이썬 버전을 적어도 최신 패치 버전으로 업데이트하기를 원할 수 있습니다.
- 예를 들어 기존 venv가 Python v3.7.4를 사용하고 있지만 v3.7.6이 출시된 경우 v3.7.6을 대신 사용합니다. v3.7.6에는 중단 없는 보안 및 버그 수정만 포함되어야 합니다.
사용하다
python -m pip freeze > requirements.txt
를 패종생목에넣여하다에 .requirements.txt
파일. 이 명령은 Linux 또는 Git Bash에서 확실히 작동합니다. Windows의 Powershell 또는 명령줄에 대해서는 100% 확실하지 않습니다.
이제 새 가상 환경을 생성한 다음 이전 가상 환경의 종속성을 추가합니다.
당신의 새 벤브를 만드세요.
- venv에 설치할 올바른 버전의 python을 사용하고 있는지 확인합니다.
- 정확히 동일한 Python 버전을 사용하려면 다음과 같이 하십시오.
- 이전 venv에서 "python --version"을 입력한 다음 해당 버전의 python 명령을 사용하여 새 venv를 생성해야 합니다.
- 명령의 새 venv 폴더 항목의 경우:
- 원하는 최종 폴더 위치에 절대 또는 상대 경로를 추가합니다.
- 사용하다
python -m venv my_new_venv
의 새 입니다.my_new_venv
폴더를 누릅니다. - venv 폴더의 이름은 venv의 이름이 됩니다(Venv가 활성화되면 프롬프트에 표시됨).
에서 합니다.
requirements.txt
java.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\
:
가상 환경으로 원하는 디렉토리로 이동
마우스 오른쪽 단추 클릭 및 편집
activate.bat
에치한에 .venv_folder\scripts
.VIRTUAL_ENV
변수 출처:set VIRTUAL_ENV=C:\old_directory\venv_name
안으로
set VIRTUAL_ENV=C:\new_directory\venv_name
편집한 배치 파일을 저장하면 끝입니다!
내하고 저장해야 . 고: 내솔션작저합니다야장해참고동하은루다▁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
'programing' 카테고리의 다른 글
BehaviorSubject와 Observable의 차이점은 무엇입니까? (0) | 2023.05.08 |
---|---|
원격 Git 저장소에서 마지막 커밋 제거 (0) | 2023.05.08 |
MacOS X에 Node.js, nvm 및 npm을 설치하는 권장 방법은 무엇입니까? (0) | 2023.05.08 |
분기를 헤드로 빠르게 전달하는 방법 (0) | 2023.05.08 |
Excel VBA를 사용하여 워크북에서 모든 일치 항목 찾기 (0) | 2023.05.08 |