有没有办法在激活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
我正在使用 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