Python Flask WSGI文件正在忽略用户';环境变量

Python Flask WSGI文件正在忽略用户';环境变量,python,flask,environment-variables,wsgi,Python,Flask,Environment Variables,Wsgi,我已经在Ubuntu 12.04上配置了Apache,以便使用WSGI运行我的Python Flask web应用程序。以下是/etc/apache2/sites enabled/000默认值的一部分: <VirtualHost *> WSGIDaemonProcess 3dkit user=3dkit group=3dkit threads=5 WSGIScriptAlias /3dkit /3dkit/kit.wsgi WSGIPassAuthorizat

我已经在Ubuntu 12.04上配置了Apache,以便使用WSGI运行我的Python Flask web应用程序。以下是/etc/apache2/sites enabled/000默认值的一部分:

<VirtualHost *>
    WSGIDaemonProcess 3dkit user=3dkit group=3dkit threads=5
    WSGIScriptAlias /3dkit /3dkit/kit.wsgi
    WSGIPassAuthorization On

    <Location /3dkit>
    WSGIProcessGroup 3dkit
    </Location>
...
print命令失败,出现异常

KeyError: 'USER'
然而,终端窗口中的此命令:

sudo -u 3dkit printenv USER
按预期输出“3dkit”

不仅仅是这个环境变量。无论我如何尝试设置环境变量,无论是在/home/3dkit/.profile中,还是在/etc/environment中,还是在我能想到的任何其他方式中,它在我的WSGI文件中都会被忽略。使其工作的唯一方法是显式调用os.environ并在WSGI文件本身中设置一个环境变量


有人能告诉我我做错了什么吗?

WSGI守护进程运行在一个非常稳定的环境中,唯一的变量集是PATH和LANG(在我的例子中,是NOTIFY_SOCKET,因为Apache是由systemd启动的)。用户、SHELL和您在交互式SHELL中看到的所有其他变量都没有设置,SHELL初始化文件(.profile等)也没有运行

您是使用
USER
作为示例,还是确实要确定流程的所有者
os.getuid()
和friends将返回uid,您可以使用类似于
pwd.getpwuid(os.getuid())[0]
(请参阅
pwd
os
模块)的内容将其转换为用户名


如果您真正想要的是访问CGI脚本中可能看到的典型服务器环境变量(例如HTTP_REFERER、REMOTE_ADDR等),这些变量位于服务器环境中,可以通过Werkzeug的请求对象访问Flask中的服务器环境,该请求对象可从Flask import Flask、Request获得。然后可以访问,例如,
request.environ['HTTP\u REFERER']

您是如何设置环境变量的?您是否
导出了它
以使它在shell之外可用?对于/home/3dkit/.profile,是的,我使用了导出。对于/etc/environment,否,根据。
sudo -u 3dkit printenv USER