Python导入(MySQLdb)和Apache python_egg_cache的问题

0 投票
1 回答
1067 浏览
提问于 2025-04-16 15:48

我在用php调用一个python脚本时遇到了问题,脚本能被调用,但在尝试导入MySQLdb的时候就卡住了。

我按照这个指南,往我的用户.bash_profile里添加了一些内容,具体内容可以查看这个链接:如何修复Trac安装中出现的与PYTHON_EGG_CACHE相关的错误?

export PYTHON_EGG_CACHE /var/www/html/path/cache

还有我在httpd.conf文件里做了一些修改。

   AddHandler mod_python
   SetEnv PYTHON_EGG_CACHE /var/www/html/path/cache

但是我还是收到了这个错误信息,网页服务器依然试图访问/root/.python-eggs,而我在新文件夹里找不到我导出的.python-eggs。

Array
(
    [stdout] => 
    [stderr] => Traceback (most recent call last):
  File "/var/www/html/grndb/upscgenesearch/python/pythontest.py", line 4, in ?
    import MySQLdb
  File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 19, in ?
  File "build/bdist.linux-x86_64/egg/_mysql.py", line 7, in ?
  File "build/bdist.linux-x86_64/egg/_mysql.py", line 4, in __bootstrap__
  File "/usr/lib/python2.4/site-packages/pkg_resources.py", line 799, in resource_filename
    return get_provider(package_or_requirement).get_resource_filename(
  File "/usr/lib/python2.4/site-packages/pkg_resources.py", line 1229, in get_resource_filename
    return self._extract_resource(manager, zip_path)
  File "/usr/lib/python2.4/site-packages/pkg_resources.py", line 1249, in _extract_resource
    real_path = manager.get_cache_path(
  File "/usr/lib/python2.4/site-packages/pkg_resources.py", line 880, in get_cache_path
    self.extraction_error()
  File "/usr/lib/python2.4/site-packages/pkg_resources.py", line 846, in extraction_error
    raise err
pkg_resources.ExtractionError: Can't extract file(s) to egg cache

在尝试将文件提取到Python egg缓存时发生了以下错误:

 [Errno 13] Permission denied: '/root/.python-eggs'

当前Python egg缓存目录设置为:

 /root/.python-eggs

也许你的账户没有这个目录的写入权限?你可以通过设置PYTHON_EGG_CACHE环境变量来更改缓存目录,指向一个可以访问的目录。

1 个回答

0

你可以看看 trac的错误追踪器 或者 这个问题。你应该能以某种方式修复apache的环境(大概率是根据你使用的操作系统来处理),或者直接升级trac。

更新: 这个问题并不是只出现在Trac/Genshii上,它会在每个在apache中运行的python应用程序中出现,尤其是当你尝试安装python包时。我在使用Trac时遇到了这个问题,解决办法是编辑网页服务器的环境。这个维基页面明确指出apache的 SetEnv 指令是无效的,你应该使用 PythonOption。至于如何修改网页服务器的环境,我是在FreeBSD服务器上做到的(你只需在 /usr/local/etc/apache22/envvars.d 中添加一个包含你需要的环境变量的脚本),我怀疑在Ubuntu上也可以通过编辑 /etc/apache2/envvars 来实现。如果你使用的是其他发行版,只需查看你的apache是如何打包的,然后相应地进行操作。

撰写回答