我通过 CGI 在 Apache 中使用 Python 和 NLTK 工具包。该工具包需要知道 APPDATA 目录,但是在服务器中执行时,os.environ
不会列出APPDATA
.
print os.envrion
当我在控制台中执行简单时,APPDATA
它存在,但在 Web 服务器中通过 CGI 执行时不存在。
到底是怎么回事?我该如何解决这个问题?我是 Python 新手,我刚刚学习它。
是很有可能的。CGI 环境与控制台中的环境不同。
您可以从 Apache (from apache.conf
) 设置变量:
SetEnv APPDATA 1.2.3.4.5
%APPDATA%
是展开到展开变量的用户(即运行脚本的人)的“应用程序数据”目录的特殊变量。Apache 没有像你一样运行,所以它不知道你的APPDATA 目录。
您应该将相关路径硬编码到脚本中,或者将其替换为相对于脚本位置的路径,例如r'..\data\nltk_data'
. 如果您确实需要,您可以通过查看__file__
.
模块在运行前检查:
if sys.platform == 'win32' and 'APPDATA' in os.environ
但是 APPDATA 在 Apache 中不存在,因为它以与您不同的另一个用户身份运行。
所以你必须手动分配你的APPDATA
import os
os.environ.__setitem__('APPDATA','C:\Python27\Lib\site-packages')
For my case, i use python 2.7, and I store all the packages in site-packages, so they are accessible for all users. so i don't really need to give my user appdata folder.