激活虚拟环境不导入环境变量

激活虚拟环境不导入环境变量

我正在尝试编写一个 bash 脚本,该脚本过夜运行几个 python 管理命令。

我从其他帖子中读到,您需要sourcevirtualenv 才能导入环境变量,但是即使添加命令后它仍然不起作用:

#!/bin/bash
source /home/DDiran/.virtualenvs/envname/bin/activate && cd 
/home/DDiran/projectdir/ && python manage.py randomize_product_order && 
python manage.py update_product_prices

有问题的 var 是$PRODUCTION_ENV并且结果为空(引发 python KeyError: None

我做错了什么,为什么?

编辑

根据@Romeo Ninov 的要求,内容bin/activatehttps://pastebin.com/7yAbZxrX

我想环境变量设置在bin/postactivate哪个设置后立即运行?bin/activate这就是激活 virtualenv 时通常的工作方式。

答案1

经过进一步研究,我发现了两种不同的解决方案。我会将其发布在这里,供将来遇到类似问题的任何人使用:

解决方案#1

按照AskUbuntu 上的这篇文章,需要获取实际脚本本身,因此不要:

bash myscript.sh

它需要是:

source myscript.sh

为什么需要发生这种情况的完整解释位于上面的链接中。

解决方案#2

容易多了。而不是激活虚拟环境并运行:

python manage.py my_command

你只需运行:

/path/to/virtual/env/bin/python manage.py my_command

这样你就根本不用担心激活虚拟环境,你在 virtualenv 中设置的环境变量就会在那里。

相关内容