在特定环境下从make运行Python



我已经编写了一个用于运行Python代码的makefile。其想法是,它将允许我在一个命令中运行linter、pytest和代码。重要的是,它还将启动一个python环境来使用。

摘录如下:

VENV := venv
all: venv
$(VENV)/bin/activate: requirements.txt
python3 -m venv $(VENV)
./$(VENV)/bin/pip install -r requirements.txt
# venv is a shortcut target
venv: $(VENV)/bin/activate
run: venv
flake8 --exclude=venv
pytest --ignore=venv
mypy advent_of_code/dayone.py
python advent_of_code/dayone.py

代码的其余部分可在此处找到:https://github.com/andrewblance/advent_of_code_2020

然而,当我运行我的代码时,我不认为它在使用这个环境。我认为它仍然使用我默认的python环境。当我运行这段代码时,我可以看到Pytest的版本,并且所使用的mypy取决于默认python环境中安装的内容。

当我运行flake&等等,我不使用新环境?我如何更改它,使其仅使用makefile中指定的环境,以及我如何";关闭";一旦我用完了环境?

简而言之:你不能。

更长:每个过程都有自己的环境。它的环境继承自启动它的进程。但是,子进程不可能修改或更改其父进程的环境。

每一个命令都是一个过程。因此,make程序就是一个进程,而进行调用的每个命令行都是一个进程。因此,当您运行启动shell进程的命令python3 -m venv $(VENV)时,它将运行另一个进程python3 -m venv ...。然后,当python3退出时,对环境python3所做的任何更改都将丢失,当shell退出时,在启动python3的shell中对环境所做的所有更改都将失去,然后其他shell将使用其他命令启动,当所有命令完成时,make将退出,当您返回shell提示符时,对其环境所作的任何更改也将丢失。

最新更新