【问题标题】:Virtualenvwrapper environment variables when running crons运行 crons 时的 Virtualenvwrapper 环境变量
【发布时间】:2019-06-08 17:34:07
【问题描述】:

我正在运行一个基本的 cron,它需要我使用 virtualenvwrapper 设置的环境变量。环境变量设置在/home/ubuntu/.virtualenvs/testcron/bin/activate

当我运行命令cd /home/ubuntu/test_script && /home/ubuntu/.virtualenvs/testcron/bin/python3 my_script.py 时,脚本按预期运行,没有错误。该脚本导入一个环境变量并打印它。

但是,当我通过 cron (* * * * * cd /home/ubuntu/test_script && /home/ubuntu/.virtualenvs/testcron/bin/python3 my_script.py) 运行相同的脚本时,我得到了这个错误。

Traceback (most recent call last):
  File "my_script.py", line 7, in <module>
    main()
  File "my_script.py", line 4, in main
    print(os.environ['SOME_ENV_VARIABLE'])
  File "/home/ubuntu/.virtualenvs/testcron/lib/python3.5/os.py", line 725, in __getitem__
    raise KeyError(key) from None
KeyError: 'SOME_ENV_VARIABLE'

当我运行以下命令时,我似乎没有任何问题

~$ /home/ubuntu/.virtualenvs/testcron/bin/python3
>>> import os
>>> os.environ['SOME_ENV_VARIABLE']
'my_env_variable_value'

我是否遗漏了一些明显的东西,virtualenvwrapper 的配置是否存在问题,或者以这种方式运行 crons 是否有问题?

【问题讨论】:

    标签: python cron virtualenv virtualenvwrapper


    【解决方案1】:

    从 virtualenv (/home/ubuntu/.virtualenvs/testcron/bin/python3) 运行 python 允许访问 venv site-packages,但它不会激活 venv。如果您在bin/activate 中发现了一些不寻常的东西,您必须在每次需要时获取它:

    * * * * * cd /home/ubuntu/test_script && . /home/ubuntu/.virtualenvs/testcron/bin/activate && /home/ubuntu/.virtualenvs/testcron/bin/python3 my_script.py
    

    【讨论】:

    • 如果环境 没有 为您设置此变量,那么您的问题就是找错了树,您只需要为您的 cron 明确设置它工作。
    • 问题说:环境变量设置在/home/ubuntu/.virtualenvs/testcron/bin/activate
    • @phd 看起来source 不起作用。您需要将其替换为 .。否则,它工作得很好。感谢您的帮助
    • 固定source
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 2021-04-26
    • 2016-01-07
    • 2020-04-06
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多