소스 명령이 포함된 Makefile이 작동하지 않습니다.

소스 명령이 포함된 Makefile이 작동하지 않습니다.

다음 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. 그 반대는 아닙니다.

관련 정보