
다음 Makefile이 있습니다
env:
source venv/bin/activate
Python 가상 환경을 활성화 하려고 하면 make env
다음 오류가 발생합니다.
source venv/bin/activate make: 소스: 해당 파일 또는 디렉터리가 없습니다 make: *** [env] 오류 1
source venv/bin/activate
하지만 셸에서 복사하여 실행하면 정상적으로 실행됩니다. Makefile 내부에 현재 디렉토리를 설정해야 합니까?
답변1
source
는쉘 내장명령은 쉘이 아닌 다른 곳에서 시작할 수 있는 실행 파일이 아닙니다. source
파일의 내용을 읽고 실행하는 것은 무엇 입니까?현재 쉘에서는새로운 쉘을 시작하지 않고.
그 목적은 현재 셸의 상태를 수정하는 것입니다(단지 sh venv/bin/activate
셸을 실행하면 스크립트의 내용도 실행되지만 activate
완료되고 종료됩니다).
하지만 당신이 하고 싶은 일은make
프로그램 상태 수정. activate
어떤 방식으로든 생성한 셸에서 스크립트를 실행해도 보는 make
환경에 대해서는 아무 것도 변경되지 않습니다 make
.
그 이유는 다른 프로그램(B)에 의해 시작된 모든 프로그램(A)이 시작 프로그램(B)의 환경에 대한 고유한 복사본을 가져오기 때문입니다. 이는 시작 프로그램의 환경에 영향을 주지 않고(A) 마음대로 변경할 수 있습니다( 비).
따라서 당신이 하고 싶은 일은 이론적으로도 작동할 수 없습니다.
Venv 내부에서 일부 Makefile을 실행해야 하는 경우 먼저 스크립트를 소싱해야 하며 activate
수정된 셸에서 시작해야 합니다 make
. 그 반대는 아닙니다.