Pipenv不应继承全局环境变量



对于我的python项目,我使用的是Pipenv。在我的本地计算机上,我有一堆AWS环境变量,我不想让我的虚拟环境使用这些变量。

每次我的pipenv shell启动时,我都会取消设置变量-但出于某种原因,在每次计算机重新启动后,在激活pipenv shell时,我可以看到我的";"父";正在被注入到虚拟环境中。

有没有什么方法可以禁用这种行为,这样就不会有环境变量溢出到我的pipenv中?

有什么方法可以禁用这种行为,这样就不会有环境变量溢出到我的pipenv中吗?

不能简单地禁用此行为,因为它是Unix进程工作的基础:子进程从父进程继承环境。我们有几种方法可以回答你的问题;最简单的可能是利用pipenv对加载.env文件的支持。如果pipenv项目的根目录中存在.env文件,则pipenv将在运行时加载该文件。

例如,如果在我们的父环境中,我们有:

SOMEVAR=somevalue
ANOTHERVAR=anothervalue
export SOMEVAR ANOTHERVAR

通常,如果我们启动pipenv shell,我们将在新环境中看到这些值:

$ pipenv shell
$ env | grep -E 'SOMEVAR|ANOTHERVAR'
ANOTHERVAR=anothervalue
SOMEVAR=somevalue

但是,如果我们在.env文件中用空值覆盖这些值:

$ cat > .env <<EOF
> SOMEVAR=
> ANOTHERVAR=
> EOF

然后,当我们启动pipenv shell:时,这将优先

$ pipenv shell
$ env | grep -E 'SOMEVAR|ANOTHERVAR'
ANOTHERVAR=
SOMEVAR=

最新更新