运行 Python 来自具有特定环境的品牌
Running Python from a make with a specific enviroment
我编写了一个用于 运行 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
程序是一个进程,make调用的每一个命令行都是一个进程。因此,当您 运行 启动 shell 进程的命令 python3 -m venv $(VENV)
时,运行s python3 -m venv ...
是另一个进程。然后 python3
对环境所做的任何更改都会在 python3
退出时丢失,而在 shell 中对环境所做的任何更改都将在 python3
启动时丢失23=] 退出,然后其他 shell 使用其他命令启动,当所有命令完成后,make
将退出,并且当您返回 [时对其环境所做的任何更改都将丢失=23=]提示。
我编写了一个用于 运行 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
程序是一个进程,make调用的每一个命令行都是一个进程。因此,当您 运行 启动 shell 进程的命令 python3 -m venv $(VENV)
时,运行s python3 -m venv ...
是另一个进程。然后 python3
对环境所做的任何更改都会在 python3
退出时丢失,而在 shell 中对环境所做的任何更改都将在 python3
启动时丢失23=] 退出,然后其他 shell 使用其他命令启动,当所有命令完成后,make
将退出,并且当您返回 [时对其环境所做的任何更改都将丢失=23=]提示。