Python:确保 os.environ 和 sys.path 相等:web-requests、shell、cron、celery

标签 python django environment-variables sys.path

我想确保 os.environsys.path 对于我们启动 Python 解释器的所有方式都是相同的:

  • 通过 Django 和 Apache mod_wsgi 的网络请求
  • 计划任务
  • 通过 ssh 交互式登录
  • celery 作业
  • 通过 systemd 启 Action 业

有解决这个问题的通用方法吗?

如果是,那就太好了:它看起来怎么样?

如果没有,很伤心:每个人都会自己解决这个问题。 ...解决这个问题的好方法是什么?

操作系统:Linux(支持systemd)

更新

更明确:

  1. 我希望 sys.path 在网络请求、cron 作业、从 shell 启动的 python 中相同,...
  2. 我希望 os.environ 在 Web 请求、cron 作业、从 shell 启动的 python 中相同,...

更新2

对于 systemd,我们使用 EnvironmentFile

更新3

我们使用虚拟环境

最佳答案

您可以使用 envdir用于管理环境变量的 python 端口(here is the original)。

如果您关心Django,我建议您以编程方式使用settings.py 中的envdir

您可以通过编程方式更新环境(例如:在wsgi文件中,django的manage.pysettings.py等)

import envdir
import os

# print os.environ['FOO']  # would raise a KeyError

path = '../envdir/prod'
if not os.path.isdir(path):
    raise ValueError('%s is not a dir' % path)
envdir.Env(path)
print os.environ['FOO']

或者您可以通过命令行上的 envdir 运行您的进程,例如:envdir envs/prod/python manage.py runserver

我建议为 python、pip 等创建别名(因为你不想覆盖系统自己的 python),例如:alias python-mycorp="envdir/abs/path/to/envs/prod/python"(或者如果您愿意,可以编写完整的 shell 脚本而不是别名)。

关于Python:确保 os.environ 和 sys.path 相等:web-requests、shell、cron、celery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223828/

相关文章:

python Pandas : exclude rows below a certain frequency count

python - 如何通过不单击按钮来调用函数?

ruby-on-rails - Rails config/local_env.yml vs .env vs bashrc 环境变量

windows - 无法将“gradle”识别为内部或外部命令,可操作程序或批处理文件

r - 从函数内部将函数环境设置为调用环境 (parent.frame) 的环境

python - 类型错误 : __str__ returned non-string (type PhoneNumber)

python - 在蓝图上注册路由引发 AttributeError : 'function' object has no attribute 'route'

python - Django 使用超过 1 个包作为管理站点

python - 线程化的 Django 任务不会自动处理事务或数据库连接?

django - django信号,如何使用“实例”