Makefile mit Quellbefehl funktioniert nicht

Makefile mit Quellbefehl funktioniert nicht

Ich habe das folgende Makefile

env:
    source venv/bin/activate

Wenn ich make enveine virtuelle Python-Umgebung aktiviere, erhalte ich die folgende Fehlermeldung

Quelle venv/bin/activate make: Quelle: Keine solche Datei oder kein solches Verzeichnis make: *** [env] Fehler 1

Aber wenn ich es kopiere source venv/bin/activateund in der Shell ausführe, läuft es einwandfrei. Muss ich das aktuelle Verzeichnis im Makefile festlegen?

Antwort1

sourceist einSchale eingebautBefehl, keine ausführbare Datei, die Sie von überall außer einer Shell starten können. Was sourcefunktioniert, ist das Lesen und Ausführen des Inhalts einer Dateiin der aktuellen Shell,ohne eine neue Shell zu starten.

Der Zweck besteht darin, den Status der aktuellen Shell zu ändern (wenn Sie einfach sh venv/bin/activate, würde Ihre Shell auch den Inhalt des activateSkripts ausführen, wäre dann aber fertig und würde beendet).

Aber was Sie tun möchten, istÄndern Sie den Status Ihres makeProgramms. Das Ausführen des activateSkripts in einer Shell, die Sie auf irgendeine Weise von starten make, ändert nichts an der Umgebung, die makees sieht.
Das liegt daran, dass jedes Programm (A), das von einem anderen Programm (B) gestartet wird, seine eigene Kopie der Umgebung des startenden Programms (B) erhält, die es (A) nach Belieben ändern kann, ohne die Umgebung des startenden Programms (B) zu beeinflussen.

Was Sie also tun möchten, kann nicht funktionieren, nicht einmal theoretisch.

Wenn Sie ein Makefile in einem Venv ausführen müssen, müssen Sie activatezuerst das Skript als Quelle verwenden und es dann von der so geänderten Shell aus starten make; nicht umgekehrt.

verwandte Informationen