Python 3의 venv 모듈이 어떻게 가상화되었는지 조사했습니다.

4133 단어 Python
Pythhon3은 다음 명령을 통해 가상 환경을 구축하고 활성화합니다.
(참조: https://docs.python.org/ja/3.9/library/venv.html#module-venv
  • 가상 환경 구축
  • python3 -m venv /path/to/new/virtual/environment
  • 활성화
  • $ source <venv>/bin/activate
  • Python3.8·mac 환경에서 venv를 실행할 때 다음과 같은 환경을 만들었다.
    $ tree . -L 5
    .
    └── venv
        ├── bin
        │   ├── Activate.ps1
        │   ├── activate
        │   ├── activate.csh
        │   ├── activate.fish
        │   ├── easy_install
        │   ├── easy_install-3.8
        │   ├── pip
        │   ├── pip3
        │   ├── pip3.8
        │   ├── python -> python3
        │   └── python3 -> /Library/Frameworks/Python.framework/Versions/3.8/bin/python3
        ├── include
        ├── lib
        │   └── python3.8
        │       └── site-packages
        │           ├── __pycache__
        │           ├── easy_install.py
        │           ├── pip
        │           ├── pip-20.2.1.dist-info
        │           ├── pkg_resources
        │           ├── setuptools
        │           └── setuptools-49.2.1.dist-info
        └── pyvenv.cfg
    

    activate 셸 읽기


    activate에서 가상 환경을 실현했다고 여겨져 엿보았다.
    다음은 activate의 내용입니다.

    빨간 테두리 부분에서 다음과 같은 특징을 볼 수 있다.
  • 1. VIRTUAL_ENV 환경 변수 설정하기
  • VIRTUAL_ENV=<path to .venv>
  • ※ vevn을 구축할 때의 전체 경로가 있습니다.
  • 2. 명령의 검색 대상을 최우선으로 설정$VIRTUAL_ENV/bin:$PATH
  • PATH="$VIRTUAL_ENV/bin:$PATH"
  • 3. 정의된 PYTHONHOME의 무효화
  • 2. Pyhon과 pip 등 명령의 목표를 향해 가상 링 경내로 전환하는 경로를 볼 수 있다.
    3. PYTHONHOME을 비활성화하면 설정된 모듈의 검색 경로가 비활성화되어 있음을 알 수 있습니다.
    다만 이렇게 되면 가상화의 실현 기능이 부족하다.
    모듈의 검색 경로를 가상 환경으로 전환하려면 무엇을 해야 합니까?

    모듈 검색 경로 전환 방법


    Python 3에는 검색 모듈에 사용할 경로 목록이 있습니다.
    그 명세서는sys입니다.path.
    (※ 실제로는syst.path를 참고하기 전에 더 많은 공정이 있습니다. 참고: https://docs.python.org/ja/3/reference/import.html#searching
    참,sys.path 경로가 어느 프로젝트인지 설정합니다.
    나는 그 의문을 해결할 보도를 찾았다.
    http://hagifoo.hatenablog.com/entry/2013/07/29/132740
    하지만 파이톤2.7시쯤인 것 같아요.
    Python3.여덟 개의 사이트.나는py 문서를 보러 가기로 결정했다.

    site.py 문서 읽어주세요.


    다음과 같은 설명이 있습니다.
    site.main () 함수의 처리는 앞부분과 뒷부분으로 구성된 최대 4개의 디렉터리를 구축하는 것부터 시작합니다.앞부분에서는sys입니다.prefix 및 sys.exec_prefix 사용하기;빈 앞부분은 사용하지 않습니다.다음에 첫 번째는 빈 문자열을 사용하고 두 번째는lib/site-packages(Windows)나lib/ptyhonX를 사용합니다.Y/site-packages(Unix 및 Macintosh)를 사용합니다.앞부분-뒷부분의 서로 다른 조합에 따라 존재하는 목록을 참고했는지 조사하고 존재 시는syst이다.path에 추가합니다.그런 다음 새로 추가된 경로에서 경로 설정 파일을 찾습니다.
    잘 모르니까 부분적으로 봅시다.
    앞부분에서는sys입니다.prefix 및 sys.exec_prefix 사용하기;빈 앞부분은 사용하지 않습니다.
    위에서 잘 몰라요...
    다음에 첫 번째는 빈 문자열을 사용하고 두 번째는lib/site-packages(Windows)나lib/ptyhonX를 사용합니다.Y/site-packages(Unix 및 Macintosh)를 사용합니다.
    오, lib/pythonX.Y/site-packages 나왔어!
    앞부분-뒷부분의 서로 다른 조합에 따라 존재하는 목록을 참고했는지 조사하고 존재 시는syst이다.path에 추가합니다.sys.path에 추가된 한마디!
    Python3.8중lib/pythonX.Y/site-packagessys.path에 추가된 것은Lib/site.py인 것 같다.
    그나저나 이 사이트는페이지에서
    venv 숨김 시스템이 적힌 사이트-packages.
    "pyvenv.cfg"라는 파일이 위에서 열거한 디렉터리의 디렉터리에 존재하면syst입니다.executable, sys.prefix, sys.exec_prefix에 이 디렉터리를 설정하고 사이트-packages (syst.base prefix와syst.base exec prefix는 항상 Python에 설치된 '실제' 접두사) 를 검사합니다."pyvenv.cfg"(가이드 체인의 설정 파일)에서 "include-System-site-packages"를 누르면 "진짜"(대소문자 구분 없음) 이외의 내용을 설정하고 시스템급 접두사를 보지 않고site-packages를 찾습니다.안 그러면 내가 보러 갈게.
    이상은 조사 결과입니다.

    appendix

  • venv 공식 문서
  • https://virtualenv.pypa.io/en/latest/
  • 좋은 웹페이지 즐겨찾기