gpt4 book ai didi

Python Egg 可以交互方式找到,但在 fastcgi 中没有

转载 作者:行者123 更新时间:2023-12-01 06:19:24 25 4
gpt4 key购买 nike

同意this question, and its answer 。我添加了鸡蛋的路径并且它起作用了。但是,当我交互运行 python 并导入 flup 时,它可以正常工作,没有任何问题或额外的路径规范。区别在哪里?

编辑:似乎在执行 fastcgi 操作时,.pth 文件没有被解析,但这只是一个猜测。需要更多官方声明。

最佳答案

经过一些更彻底的分析,我想我明白这里发生了什么。

当 Python 启动时,它会设置 sys.path(所有这些都是初始化解释器的一部分)。

此时,环境用于确定在哪里可以找到.pth文件。如果此时没有定义 PYTHONPATH,那么它将找不到安装到 sys.prefix 的模块。此外,由于 easy-install.pth 可能安装到您的自定义前缀目录中,因此它不会找到要解析的 .pth 文件。

解释器初始化后向 os.environ 或 sys.path 添加环境变量不会导致 .pth 文件被再次解析。这就是为什么您发现自己被迫手动执行您期望 Python 自然执行的操作。

我认为正确的解决方案是确保自定义路径在解释器启动时(即执行 mysite.fcgi 之前)可供 Python 解释器使用。

我寻找将 PYTHONPATH 环境变量添加到 mod_fastcgi 的选项,但我没有看到这样的选项。也许这是一个通用的 Apache 选项,因此没有记录在 mod_fastcgi 中,或者可能无法在 mod_fastcgi 配置中设置静态变量。

鉴于此,我相信您可以通过以下方式找到解决方法:

  1. 创建一个包装脚本(一个 shell 脚本或另一个 Python 脚本),它将成为您的新 FastCGI 处理程序。
  2. 在此包装器脚本中,将 PYTHONPATH 环境变量设置为您的前缀路径(就像您在有效的用户环境中设置的那样)。
  3. 让包装器脚本使用更改后的环境为原始 fastcgi 处理程序 (mysite.fcgi) 启动 Python 进程。

虽然我没有一个好的测试环境,但我认为包装器 shell 脚本看起来像这样:

#!/bin/sh
export PYTHONPATH=/your/local/python/path
/path/to/python /path/to/your/fastcgi/handler # this line should be similar to what was supplied to mod_fastcgi originally

可能需要考虑其他替代解决方法。

  • 从 mysite.fgci,使 Python 根据新的、更改的环境重新处理 sys.path。我不知道这是如何完成的,但这可能比使用包装脚本更干净。
  • 找到一个 Apache/mod_fastcgi 选项,该选项允许为 fastcgi 进程指定环境变量 (PYTHONPATH)。

关于Python Egg 可以交互方式找到,但在 fastcgi 中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1384717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com