programing

virtualenv 폴더를 중단하지 않고 이름 바꾸기

showcode 2023. 6. 14. 22:02
반응형

virtualenv 폴더를 중단하지 않고 이름 바꾸기

폴더를 만들고 폴더에서 가상 환경 인스턴스를 초기화했습니다.

$ mkdir myproject
$ cd myproject
$ virtualenv env

가 행할때실을 할 때.(env)$ pip freeze설치된 패키지가 표시됩니다.

이제이변다니합경을름다니합▁now변▁rename로 이름을 바꾸고 싶습니다.myproject/project/.

$ mv myproject/ project/

하지만, 지금 내가 달릴 때

$ . env/bin/activate
(env)$ pip freeze

파이프가 설치되어 있지 않다고 나옵니다.환경을 파괴하지 않고 프로젝트 폴더의 이름을 변경하려면 어떻게 해야 합니까?

상대 경로를 사용하도록 설치를 조정해야 합니다. virtualenv에는 이 되어 있습니다.--relocatable선택.문서에서:

일반적으로 환경은 특정 경로에 연결됩니다.즉, 환경을 이동하거나 다른 시스템에 복사할 수 없습니다.다음 명령을 사용하여 환경을 수정하여 재배치할 수 있습니다.

virtualenv -- 재배치 가능한 ENV

참고: ENV는 가상 환경의 이름이며 이 이름을 ENV 디렉터리 외부에서 실행해야 합니다.

이렇게 하면 setuptools 또는 distribute에 의해 생성된 파일 중 일부가 상대 경로를 사용하게 되며, Python 인터프리터의 위치를 사용하여 환경을 선택하는 대신 activate_this.py를 사용하도록 모든 스크립트가 변경됩니다.

참고: 환경에 패키지를 설치한 후 이를 실행해야 합니다.환경을 재배치할 수 있도록 만든 다음 새 패키지를 설치하는 경우 virtualenv --replocatable을 다시 실행해야 합니다.

저는 "방법을 아는"보다 "이유를 아는 것"이 더 중요하다고 믿습니다.이 문제를 해결하기 위한 또 다른 방법이 있습니다.

을 할 때. env/bin/activate과 같은합니다(「 」 「 」 「 」 「 」를 사용합니다)./tmp예):

VIRTUAL_ENV="/tmp/myproject/env"
export VIRTUAL_ENV

그러나 방금 이름을 변경했습니다.myprojectproject명령을 실행하지 못했습니다. 그기때문라고 쓰여 입니다.pip is not installed하지 pip 및 환경에서 할 수 있습니다.pip소스가 정확하지 않습니다.

수동으로 이 문제를 해결하려면 다음과 같이 하십시오.

  1. Vim과 같은 당신이 좋아하는 에디터로, 수정하세요./tmp/project/env/bin/activate:

    VIRTUAL_ENV='/tmp/myproject/env'=>VIRTUAL_ENV='/tmp/project/env'

  2. /tmp/project/env/bin/pip 1줄 1:줄 1:

    #!/tmp/myproject/env/bin/python=>#!/tmp/project/env/bin/python

다음 합니다.env은 당신의 다시, 그면당당신의은신러를 될 입니다.pip다시 돌아왔습니다.

참고: @jb.가 지적한 바와 같이 이 솔루션은 쉽게(다시) 생성되는 경우에만 적용됩니다.virtualenv하는 데 몇 환경은 되지 않습니다.


가상 환경은 쉽게 만들고 전환할 수 있기 때문에 단일 구성에 갇히는 것을 방지할 수 있기 때문에 매우 좋습니다.프로젝트 요구 사항을 알고 있거나 프로젝트 요구 사항을 얻을 수 있는 경우 새 항목 만들기:

  • 성을 합니다.requirements.txt

    (env)$ pip freeze > requirements.txt

    • 이 경우수없을 만들 수 requirements.txt 일파, 크체를 선택합니다.env/lib/pythonX.X/site-packages▁removing▁before▁the에▁original전을 제거하기 전에.env.
  • 의 항목삭을 합니다.(env)

    deactivate && rm -rf env

  • 새기 virtualenv 사항은 다음과 .

    virtualenv env && . env/bin/activate && pip install -r requirements.txt


또는 virtualenvrapper를 사용하여 모든 가상 환경을 중앙 집중화된 위치에 보관하므로 작업을 조금 더 쉽게 수행할 수 있습니다.

$(old-venv) pip freeze > temp-reqs.txt
$(old-venv) deactivate
$ mkvirtualenv new-venv
$(new-venv) pip install -r temp-reqs.txt
$(new-venv) rmvirtualenv old-venv

저는 도움을 주기 위해 항상 virtualenwrapperfrapper를 설치합니다.셸 프롬프트에서:

pip install virtualenvwrapper

virtualenvrapper 문서에는 cpvirtualenv 이렇게 문서화되어 있습니다.환경을 벗어나 셸 프롬프트로 돌아가십시오.필요한 이름을 입력합니다.

cpvirtualenv oldenv newenv

그런 다음 필요한 경우:

rmvirtualenv oldenv

새 환경으로 이동하기

workon newenv

다음 단계를 수행하여 문제를 해결할 수 있습니다.

  1. 디렉터리 이름 바꾸기
  2. 다시 합니다.$ virtualenv ..\path\renamed_directory
  3. virtualenv는 패키지를 제자리에 둔 상태에서 디렉토리 연결을 수정합니다.
  4. $ scripts/activate
  5. $ pip freeze 설치되어 확인하기 .
  6. virtualenv 디렉토리의 스크립트 파일에 정적 경로 종속성이 있는 경우 이러한 종속성을 수동으로 변경해야 합니다.

여러 번 문제 없이 작동했던 또 다른 방법은 virtualenv-clone입니다.

pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env

프로젝트 폴더 내에서 실행:

cd bin
sed -i 's/old_dir_name/new_dir_name/g' *

비활성화 및 활성화하는 것을 잊지 마십시오.

venv가 내장된 Python 3.3+의 경우

3 버전은 3.3이다.virtualenv에 에지는 파이썬내있습니다로 기본 됩니다.venv모듈.몇 가지 사소한 차이가 있는데, 그 중 하나는--relocatable옵션이 제거되었습니다.따라서 일반적으로 가상 환경을 이동하기보다는 가상 환경을 다시 생성하는 것이 가장 좋습니다. 방법에 대한 자세한 내용은 다음 답변을 참조하십시오.

가상 환경을 재생성하는 것이 아니라 이동하려는 목적이 무엇입니까?가상 환경은 종속된 특정 패키지 또는 모듈의 서로 다른 특정 버전을 가질 수 있도록 venv를 사용하여 모듈/패키지의 종속성을 관리하고 이러한 패키지 또는 모듈을 로컬로 설치할 수 있도록 합니다.

따라서 패키지는 venv를 처음부터 다시 만들 수 있는 방법을 제공해야 합니다.일반적으로 이 작업은 다음을 사용하여 수행됩니다.requirements.txt 및 파일및도a은도 .requirements-dev.txt파일 및 패키지 자체의 설정/설치에서 venv를 다시 만드는 스크립트도 제공합니다.

문제가 될 수 있는 부분 중 하나는 실행 파일로 특정 버전의 Python이 필요할 수 있다는 것입니다. 이 파일은 아직 존재하지 않더라도 자동화하기가 어렵습니다.그러나 기존 가상 환경을 재생성할 때는 새 가상 환경을 생성할 때 기존 venv에서 python을 실행하기만 하면 됩니다.그 후에는 일반적으로 pip을 사용하여 모든 종속성을 재설치하는 것이 문제입니다.requirements.txt파일:

Windows의 Git Bash에서:

python -m venv mynewvenv
source myvenv/Scripts/activate
pip install -r requirements.txt

로컬로 개발된 다른 패키지의 로컬 종속성이 여러 개인 경우에는 로컬 절대 경로 등을 업데이트해야 할 수 있습니다. 적절한 Python 패키지로 설정하면 git repo에서 설치할 수 있으므로 정적 URL을 소스로 하여 이 문제를 방지할 수 있습니다.

virtualenv --relocatable ENV바람직한 솔루션이 아닙니다.대부분의 사람들이 장기적인 부작용 없이 가상 환경의 이름을 바꿀 수 있는 기능을 원한다고 생각합니다.

그래서 저는 그것을 할 수 있는 간단한 도구를 만들었습니다.virtual env-mv에 대한 프로젝트 페이지는 이를 좀 더 자세히 설명하지만 기본적으로 사용할 수 있습니다.virtualenv-mv의단한구사것처럼는용하의 간단한 처럼.mv(옵션 없음).

예:

virtualenv-mv myproject project

하지만 제가 방금 이것을 해킹했다는 것을 알아두시기 바랍니다.비정상적인 상황(예: 연결된 가상 환경)에서 고장이 발생할 수 있으므로 주의하십시오(손실할 수 없는 항목은 백업). 문제가 발생하면 알려 주십시오.

효과가 더 : 하세요: 씬훨더쉬해은있요: 그복하세사다냥니효나었습.site-packages이전 가상 환경의 폴더를 새 가상 환경으로 이동합니다.

Visual Studio Code(vscode)를 사용하여 프로젝트 루트의 ./env 폴더를 열고 업데이트된 프로젝트 이름으로 전환하기 위해 대량 찾기/바꾸기를 수행했습니다.이를 통해 문제가 해결되었습니다.

로 확인which python

만약 당신이 콘덴서를 사용하고 있다면,

conda create --name new_name --clone old_name
conda remove --name old_name --all # or its alias: `conda env remove --name old_name`

언급URL : https://stackoverflow.com/questions/6628476/renaming-a-virtualenv-folder-without-breaking-it

반응형