为什么PYTHONPATH在cgi(apache)中与本地值不同?

0 投票
2 回答
2068 浏览
提问于 2025-04-17 12:40

我想知道如何通过设置pythonpath来导入模块。要查看Python正在查找的路径,可以使用:

import sys
print "modules will be searched in the following paths:"
for path in sys.path:
    print path
print "python version: " + sys.version

我在PYTHONPATH环境变量中添加了一些额外的路径(在Windows的图形界面中),但是当我在Apache中以cgi文件的形式执行上面的代码时(在浏览器中),并没有显示我添加的路径……(实际上,它也不会从缺失的路径加载模块)
当我在本地用Python执行代码时,所有路径都显示出来(所以这没问题)。

#!C:\tools\programming\Python27\python.exe
import cgi
import cgitb
cgitb.enable()
print "Content-type: text/html" 
print
import sys

#import timeOperations

for path in sys.path:
    print path + "<br>"

print "python version: " + sys.version
print "<html>"
print "<center>Lode doet het weer!</center>"
print "</html>"

我重启了电脑,但没有成功。电脑上只安装了一个Python版本。

为什么PYTHONPATH会有不同的值?我不知道。
任何帮助都很感激!

Lode

2 个回答

0

环境变量是针对特定用户的。我怀疑Apache是以和你一样的用户身份在运行。你需要通过服务控制台为Apache用户单独添加这些环境变量。

1

我个人不太喜欢通过环境变量来添加东西到PYTHONPATH,主要是因为这个原因。我觉得问题可能出在你的PYTHONPATH环境变量的作用范围和Apache使用的不同。例如,你的变量可能只对你这个用户有效,而Apache则是使用系统的环境变量。

我觉得直接在你的site-packages目录里添加一个“.pth”文件更可靠,这样就完全不需要用环境变量了。你可以在Python解释器里执行以下代码:

import distutils.sysconfig
print distutils.sysconfig.get_python_lib()

这段代码会打印出你的“site-packages”目录的位置。接着,去到那个目录(可以用命令行或者Windows资源管理器),在里面创建一个叫“MyPythonPath.pth”的文件(或者其他名字,只要后缀是“.pth”就行)。在这个文件里,每一行写上你想添加到PYTHONPATH的路径:

C:\Path\to\first\directory
C:\Path\to\second\directory

下次你运行Python的时候,这些文件夹会被自动添加到你的路径里,不管你在哪里运行它,只要你一直使用同一个Python解释器就可以了。

撰写回答