Python导入(MySQLdb)和Apache python_egg_cache的问题
我在用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 个回答
你可以看看 trac的错误追踪器 或者 这个问题。你应该能以某种方式修复apache的环境(大概率是根据你使用的操作系统来处理),或者直接升级trac。
更新: 这个问题并不是只出现在Trac/Genshii上,它会在每个在apache中运行的python应用程序中出现,尤其是当你尝试安装python包时。我在使用Trac时遇到了这个问题,解决办法是编辑网页服务器的环境。这个维基页面明确指出apache的 SetEnv
指令是无效的,你应该使用 PythonOption
。至于如何修改网页服务器的环境,我是在FreeBSD服务器上做到的(你只需在 /usr/local/etc/apache22/envvars.d
中添加一个包含你需要的环境变量的脚本),我怀疑在Ubuntu上也可以通过编辑 /etc/apache2/envvars
来实现。如果你使用的是其他发行版,只需查看你的apache是如何打包的,然后相应地进行操作。