【问题标题】:Why gives the PYTHONPATH a different value? from cgi (apache) not similar to local为什么给 PYTHONPATH 一个不同的值?来自 cgi (apache) 与本地不相似
【发布时间】:2012-02-09 14:22:25
【问题描述】:

我正在寻找如何通过设置 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 gui)中添加了一些额外的路径,但是当在 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 赋予不同的值?我不知道。 任何帮助表示赞赏!

矿脉

【问题讨论】:

    标签: python apache cgi pythonpath


    【解决方案1】:

    出于这个原因,我个人不喜欢通过环境变量向 PYTHONPATH 添加内容。我怀疑原因是您的 PYTHONPATH 环境变量的范围与 Apache 使用的范围不同。例如,您的变量可能对您的用户来说是本地的,而 Apache 仅使用系统环境变量运行。

    我发现通过将“.pth”文件添加到您的站点包目录来完全绕过环境变量更可靠。从 python 解释器执行以下代码:

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

    这将打印您的“站点包”目录的位置。访问该目录(从命令行或 Windows 资源管理器)并在其中创建一个名为“MyPythonPath.pth”的文件(或其他扩展名为“.pth”的文件)。在其中,将要添加到 PYTHONPATH 的每个值包含在单独的行中:

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

    下次运行 Python 时,这些文件夹将添加到您的路径中,无论您在何处运行,只要您始终使用相同的 Python 解释器。

    【讨论】:

    • 效果很好!我从一开始就不喜欢 pythonpath,这是一个很好的选择!我把这个解决方案放在了找不到模块时的错误捕获中:)非常感谢。
    【解决方案2】:

    环境变量是特定于用户的。我怀疑 Apache 是否以与您相同的用户身份运行。您需要通过服务控制台专门为 Apache 用户添加它们。

    【讨论】:

    • 哈哈,现在我明白了。感谢您的解释。(但我实施了 mlefavours 解决方案)
    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多