Programming

virtualenv 폴더 이름을 바꾸지 않고 이름 바꾸기

procodes 2020. 6. 5. 22:39
반응형

virtualenv 폴더 이름을 바꾸지 않고 이름 바꾸기


폴더를 만들고 virtualenv 인스턴스를 초기화했습니다.

$ mkdir myproject
$ cd myproject
$ virtualenv env

내가 실행 (env)$ pip freeze하면 설치된 패키지가 정상적으로 표시됩니다.

이제로 이름 myproject/바꾸고 싶습니다 project/.

$ mv myproject/ project/

그러나 이제 내가 달릴 때

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

pip가 설치되지 않았다고 표시됩니다. 환경을 파괴하지 않고 프로젝트 폴더의 이름을 바꾸려면 어떻게해야합니까?


상대 경로를 사용하도록 설치를 조정해야합니다. virtualenv--relocatable옵션을 제공합니다 . 에서 워드 프로세서 :

일반적으로 환경은 특정 경로와 연결되어 있습니다. 즉, 환경을 이동하거나 다른 컴퓨터로 복사 할 수 없습니다. 다음 명령으로 환경을 재배치 할 수 있도록 환경을 수정할 수 있습니다.

$ virtualenv-연관 가능한 ENV

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

이것은 setuptools에 의해 생성 된 파일 중 일부를 만들거나 상대 경로를 사용하고 Python 인터프리터의 위치를 ​​사용하여 환경을 선택하는 대신 activate_this.py를 사용하도록 모든 스크립트를 변경합니다.

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


나는 "왜 아는 것"이 ​​"어떻게 아는 것"보다 중요 하다고 생각 합니다 . 이 문제를 해결하는 또 다른 방법이 있습니다.

를 실행 . env/bin/activate하면 실제로 다음 명령을 실행합니다 ( /tmp예 : 사용 ).

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

그러나 방금 이름 myproject로 변경 하여 project해당 명령을 실행하지 못했습니다. 이것이 시스템 글로벌 환경에 pip is not installed설치 되지 않았고 pipvirtualenv pip가 올바르게 소스 되지 않았기 때문에 이라고 말하는 이유 입니다.

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

  1. Vim과 같은 자주 사용하는 편집기를 사용하여 /tmp/project/env/bin/activate일반적으로 42 행에서 수정하십시오 .

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

  2. /tmp/project/env/bin/pip1 행에서 수정하십시오 .

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

그런 다음 가상 환경을 env다시 활성화 하면 pip다시 돌아온 것을 볼 수 있습니다.


참고 : @jb로. 이 솔루션은 쉽게 (재) 만들어진 것에 만 적용됩니다 virtualenv. 환경에이 솔루션을 설치하는 데 몇 시간이 걸리는 경우 권장하지 않습니다


Virtualenvs는 쉽게 만들고 전환 할 수 있기 때문에 훌륭합니다. 단일 구성으로 고정되지 않습니다. 프로젝트 요구 사항을 알고 있거나 얻을 수 있는 경우 새로 작성하십시오virtualenv .

  • requirements.txt파일 만들기

    (env)$ pip freeze > requirements.txt

    • requirements.txt파일을 만들 수 없으면 env/lib/pythonX.X/site-packages원본을 제거하기 전에 확인하십시오 env.
  • 기존 삭제 (env)

    deactivate && rm -rf env

  • 새로 만들기 virtualenv, 활성화 및 설치 요구 사항

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


또는 virtualenvwrapper를 사용하여 모든 virtualenv가 중앙 위치에 유지되므로 작업이 조금 더 쉽습니다.

$(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

나는 항상 virtualenvwrapper를 설치하여 도움을줍니다. 쉘 프롬프트에서 :

pip install virtualenvwrapper

virtualenvwrapper 문서에 문서화 된 방법이 있습니다 -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' *

비활성화 및 활성화를 잊지 마십시오


virtualenv --relocatable ENV is not a desirable solution. I assume most people want the ability to rename a virtualenv without any long-term side effects.

So I've created a simple tool to do just that. The project page for virtualenv-mv outlines it in a bit more detail, but essentially you can use virtualenv-mv just like you'd use a simple implementation of mv (without any options).

For example:

virtualenv-mv myproject project

Please note however that I just hacked this up. It could break under unusual circumstances (e.g. symlinked virtualenvs) so please be careful (back up what you can't afford to lose) and let me know if you encounter any problems.

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

반응형