Python 3의 venv 모듈이 어떻게 가상화되었는지 조사했습니다.
4133 단어 Python
(참조: https://docs.python.org/ja/3.9/library/venv.html#module-venv
python3 -m venv /path/to/new/virtual/environment
$ source <venv>/bin/activate
$ 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의 내용입니다.
빨간 테두리 부분에서 다음과 같은 특징을 볼 수 있다.
VIRTUAL_ENV=<path to .venv>
$VIRTUAL_ENV/bin:$PATH
PATH="$VIRTUAL_ENV/bin:$PATH"
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-packages
에 sys.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
Reference
이 문제에 관하여(Python 3의 venv 모듈이 어떻게 가상화되었는지 조사했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nassy20/items/0f438f638e03fbd9e566텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)