【问题标题】:APPDATA is not returned in Python executed via CGI通过 CGI 执行的 Python 中不返回 APPDATA
【发布时间】:2012-06-27 04:16:30
【问题描述】:
我通过 CGI 在 Apache 中使用 Python 和 NLTK 工具包。工具包需要知道APPDATA目录,但是在服务端执行时,os.environ没有列出APPDATA。
当我在控制台中执行一个简单的print os.envrion 时,APPDATA 存在,但在 Web 服务器中通过 CGI 执行时不存在。
发生了什么事?我该如何解决这个问题?我是 Python 新手,我刚刚学习它。
【问题讨论】:
标签:
python
apache
cgi
nltk
appdata
【解决方案1】:
很有可能。 CGI 环境与控制台中的环境不同。
您可以从 Apache 设置变量(来自 apache.conf):
SetEnv APPDATA 1.2.3.4.5
【解决方案2】:
%APPDATA% 是一个特殊的变量,它展开到展开变量的用户(即运行脚本的人)的“应用程序数据”目录。 Apache 没有像你一样运行,所以它不知道你的 APPDATA 目录。
您应该将相关路径硬编码到脚本中,或者将其替换为相对于脚本位置的路径,例如r'..\data\nltk_data'。如果确实需要,可以通过查看__file__ 来恢复脚本的绝对位置。
【解决方案3】:
模块在运行前检查这个:
if sys.platform == 'win32' and 'APPDATA' in os.environ
但是 Apache 中不存在 APPDATA,因为它以与您不同的另一个用户身份运行。
所以你必须手动分配你的 APPDATA
import os
os.environ.__setitem__('APPDATA','C:\Python27\Lib\site-packages')
就我而言,我使用 python 2.7,并将所有包存储在站点包中,因此所有用户都可以访问它们。所以我真的不需要给我的用户 appdata 文件夹。