Bash가 아닌 쉘에서 Python venv를 활성화하는 방법은 무엇입니까?

Bash가 아닌 쉘에서 Python venv를 활성화하는 방법은 무엇입니까?

대부분의 튜토리얼/온라인 리소스 에서는 Python venv를 활성화하기 위해 또는 source( bash 내장)을 사용하는 것이 좋습니다 . .예를 들어,이 페이지Linux에서는 다음을 수행하는 것이 좋습니다.

cd ~/<proj_name>

. bin/activate

(Windows에서는 단지 cd\<proj_name>and activate)

하지만 docker/Dockerfile에서 venv를 활성화해야 하는데 bash를 사용하지 못할 수도 있습니다(예: podman OCI 이미지 사용). 기본적으로Debian 기반 배포판과 같은 배포판채택하는 사람들공개 계정 668, 이전 Dockerfile에는 venv에 대한 pip 명령이 없습니다."이 환경은 외부에서 관리됩니다." 오류가 발생합니다.. 이제 권장되는 접근 방식은 venv를 사용하는 것 같습니다.

source특정 쉘에만 해당된다는 사실을 고려할 때 내 질문은 다음과 같습니다.

Linux에서는 항상 sourcevenv를 사용해야 합니까 activate?

그렇다면 일반적인 비 bash 쉘에서 venv를 활성화하는 올바른 방법은 무엇이며 이유는 무엇입니까?

특히 일반 Dockerfile의 pip 명령에서 venv를 사용하는 올바른 방법은 무엇입니까?

답변1

bin/activate.Bourne과 같은 셸(70년대 후반 이후의 모든 시스템 및 모든 ash, dash, busybox sh(ash 또는 mush), ksh , pdksh, mksh, oksh, bosh, yash, zsh...) 에서 실행할 수 있습니다 . 어떤 식으로든 구체적이지 않습니다.sourceshbash

bin/activate.cshfor csh또는 tcshshell 도 있고 , bin/activate.fishfor the fishshell도 있습니다.

다른 셸을 사용하는 경우 이 작업을 직접 수행해야 하지만 환경 변수를 VIRTUAL_ENV정의 하거나 업데이트 PYTHONHOME하는 문제이므로 적응하기가 너무 어렵지 않습니다 .PATH

또는 언제든지 sh소스에서 셸을 다시 실행할 수 있습니다. bin/activate예를 들어, rcpython-venv가 지원하지 않는 것으로 보이는 쉘이나 파생물에서:

exec sh -c '. /path/to/bin/activate && exec rc'

rc업데이트된 환경을 사용하여 실행이 다시 실행됩니다 sh.

그럼에도 불구하고 컨테이너에는 /bin/shbusybox, mksh 또는 bash 등 Bourne과 유사한 컨테이너가 있을 것입니다.

위와 유사하게 이 가상 환경을 사용하여 컨테이너에서 일부 명령을 실행하려면 다음을 실행할 수 있습니다.

sh -c '. /path/to/venv/bin/active && exec "$0" "$@"' python3 /path/to/whatever.py

어떤 이유로 단일 컨테이너에 서로 다른 가상 환경이 필요하다고 가정해 보겠습니다. 대부분의 경우 다양한 컬렉션, Python 모듈 또는 Python 버전이 포함된 다양한 컨테이너를 사용할 수 있습니다. 컨테이너는 이미 일종의 가상화 형태라는 점을 기억하세요.

관련 정보