我正在尝试编写一个 bash 脚本,该脚本过夜运行几个 python 管理命令。
我从其他帖子中读到,您需要source
virtualenv 才能导入环境变量,但是即使添加命令后它仍然不起作用:
#!/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/activate
:https://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 中设置的环境变量就会在那里。