programing

가상 환경에서 사용자 지정 코드는 어디로 이동합니까?

topblog 2023. 8. 11. 21:27
반응형

가상 환경에서 사용자 지정 코드는 어디로 이동합니까?

사용할 때 따라야 하는 디렉토리 구조의 종류virtualenv예를 들어 WSGI 애플리케이션을 구축하고 가상 환경을 만든 경우foobar다음과 같은 디렉토리 구조로 시작하겠습니다.

/foobar
  /bin
    {activate, activate.py, easy_install, python}
  /include
    {python2.6/...}
  /lib
    {python2.6/...}

이 환경이 생성되면 다음과 같은 환경을 자체적으로 배치할 수 있습니다.

  • 파이썬 파일?
  • 정적 파일(파일/등)?
  • 온라인에서 이용할 수 있지만 치즈 가게에서 찾을 수 없는 것과 같은 "맞춤형" 패키지?

에 관하여virtualenv디렉토리?

(가상 환경 디렉토리 자체가 어디로 이동해야 하는지 이미 알고 있다고 가정합니다.)

virtualenv응용 프로그램 인스턴스가 아닌 파이썬 인터프리터 인스턴스를 제공합니다.일반적으로 시스템의 기본 Python을 포함하는 디렉터리에 응용 프로그램 파일을 만들지 않습니다. 마찬가지로 가상 환경 디렉터리에서 응용 프로그램을 찾을 필요가 없습니다.

예를 들어 동일한 가상 환경을 사용하는 여러 애플리케이션이 있는 프로젝트가 있을 수 있습니다.또는 나중에 시스템 Python과 함께 배포될 가상 환경을 사용하여 애플리케이션을 테스트할 수도 있습니다.또는 가상 환경 디렉토리를 앱 디렉토리 내 어딘가에 배치하는 것이 타당할 수 있는 독립 실행형 앱을 패키징하고 있을 수 있습니다.

그래서 일반적으로, 저는 그 질문에 대한 하나의 정답이 있다고 생각하지 않습니다.그리고, 좋은 점은virtualenv즉, 다양한 사용 사례를 지원합니다. 단 하나의 올바른 방법만 있을 필요는 없습니다.

몇 개의 프로젝트만 자주 사용하는 경우 각 프로젝트에 대해 새 가상 환경을 생성하고 패키지를 바로 내부에 배치하는 것을 막을 수 있는 것은 없습니다.

/foobar
  /bin
    {activate, activate.py, easy_install, python}
  /include
    {python2.6/...}
  /lib
    {python2.6/...}
  /mypackage1
    __init__.py
  /mypackage2
    __init__.py

이 접근 방식의 장점은 프로젝트에 속하는 활성화 스크립트를 항상 찾을 수 있다는 것입니다.

$ cd /foobar
$ source bin/activate
$ python 
>>> import mypackage1
>>>

좀 더 정리하기로 결정했다면 모든 가상 환경을 하나의 폴더에 넣고 작업 중인 프로젝트의 이름을 따서 각 가상 환경의 이름을 지정해야 합니다.

  /virtualenvs
    /foobar
      /bin
        {activate, activate.py, easy_install, python}
      /include
        {python2.6/...}
      /lib
        {python2.6/...}
  /foobar
    /mypackage1
      __init__.py
    /mypackage2
      __init__.py

이렇게 하면 문제가 발생했을 때 항상 새로운 가상 환경에서 다시 시작할 수 있으며 프로젝트 파일이 안전하게 유지됩니다.

또 다른 장점은 여러 프로젝트에서 동일한 가상 환경을 사용할 수 있기 때문에 종속성이 많은 경우 동일한 설치를 반복할 필요가 없다는 것입니다.

$ cd /foobar
$ source ../virtualenvs/foobar/bin/activate
$ python 
>>> import mypackage2
>>>

정기적으로 가상 환경을 설정하고 해체해야 하는 사용자의 경우 가상 환경 래퍼를 검토하는 것이 좋습니다.

http://pypi.python.org/pypi/virtualenvwrapper

가상 환경 래퍼를 사용하면

* create and delete virtual environments

* organize virtual environments in a central place

* easily switch between environments

프로젝트 "foo" 및 "bar"에서 작업할 때 가상 환경이 어디에 있는지에 대해 더 이상 걱정할 필요가 없습니다.

  /foo
    /mypackage1
      __init__.py
  /bar
    /mypackage2
      __init__.py

프로젝트 "foo" 작업을 시작하는 방법은 다음과 같습니다.

$ cd foo
$ workon
bar
foo
$ workon foo
(foo)$ python
>>> import mypackage1
>>>

그런 다음 프로젝트 "bar"로 전환하는 것은 다음과 같이 간단합니다.

$ cd ../bar
$ workon bar
(bar)$ python
>>> import mypackage2
>>>

꽤 깔끔하네요, 그렇죠?

virtualenvs는 재배치할 수 없기 때문에 virtualenv 디렉터리에 프로젝트 파일을 배치하는 것은 좋지 않은 관행이라고 생각합니다.가상 환경 자체는 프로젝트의 일부가 아니라 생성된 개발/배포 아티팩트(.pyc 파일과 유사)입니다. 언제든지 쉽게 가상 환경을 날려버리고 다시 생성하거나 새 배포 호스트에 새 가상 환경을 생성할 수 있어야 합니다.

실제로 많은 사람들이 가상 환경 래퍼를 사용하므로 실제 가상 환경이 사용자의 인식에서 거의 완전히 제거되어 기본적으로 모든 가상 환경이 $HOME/.virtual 환경에 나란히 배치됩니다.

당신이 당신의 프로젝트에 a를 준다면,setup.pypip은 버전 제어에서 직접 가져올 수 있습니다.

다음과 같은 작업을 수행합니다.

$ virtualenv --no-site-packages myproject
$ . myproject/bin/activate
$ easy_install pip
$ pip install -e hg+http://bitbucket.org/owner/myproject#egg=proj

-e를 프젝트투것다니입할입에 넣을 입니다.myproject/src에 연결합니다.myproject/lib/pythonX.X/site-packages/됩니다.site-packages.#egg비트는 당신을 위해 만든 달걀 패키지에 당신이 어떤 이름을 붙이고 싶은지 pip에게 알려줍니다.

당신이 않경지는우를 사용하지 --no-site-packagespip을 할 pip을 할 때 하십시오.-E

언급URL : https://stackoverflow.com/questions/1783146/where-in-a-virtualenv-does-the-custom-code-go

반응형