有没有办法在激活venv时自动加载环境变量?

Is there a way to automatically load environment variables when activating venv?

我正在使用 python venv 创建虚拟环境。但是,由于我正在处理多个具有不同虚拟环境的项目,所以我不想每次切换到不同项目时都手动设置环境变量。

有没有办法在激活venv时自动设置venv环境变量?

这个问题的最佳实践是什么?

激活虚拟环境无非是采购一个shell脚本。您可以编辑该脚本以设置您喜欢的任何变量。您可能还想编辑 deactivate 的定义以清除或回滚您对环境所做的任何更改。

一个好的做法是使用 dotenv。您可以通过将环境变量放入名为 .env 的文件中来加载您的环境,并且无论何时您想要加载环境,只需使用以下行:

from dotenv import load_dotenv
load_dotenv()

它的优点是它只存在于您 运行 单个脚本的范围内,因为它基本上就像调用 os.environ['variable'] = 'value' 多次一样工作。

您需要编写一个 bash 脚本(如果您正在使用 bash shell),您在其中指定了将激活项目的特定命令 python environment 并在系统环境中添加项目特定的环境变量。并在退出项目时删除环境变量 python 环境。

但我不认为这是 good/correct 做事的方式。 @mz 解决方案是正确的,您可以在其中定义一个 .env 文件并在其中定义环境变量。并在项目运行时使用load_env读取环境变量

这个概念是基于 Django 的两勺。我已经使用 venv 实现了它。

  • 在 venv 生成的虚拟环境中打开 Windows PowerShell 脚本。
  • 脚本位于venv/Scripts/Activate。ps1
  • 在文件底部,您将看到这行代码: $env:VIRTUAL_ENV = $VenvDir
  • 在该代码下方,输入您的环境变量,如下所示: $env:VARIABLE_NAME = 'variable_value'

同样的概念,如果你使用命令提示符激活环境,你需要将环境变量放在 venv/Scripts/activate.bat