【发布时间】:2017-06-06 11:57:56
【问题描述】:
该错误仅发生在 web.xml 中。如果我在控制台中运行它,就可以了。我在 ubuntu 中工作。
我已经使用 CGI 设置了 apache2 来处理 python,并尝试在代码中显示 python 版本,并且可以证明 web 和控制台都在相同的 python 版本和用户上运行。
但是只要import lxml.etree,我就得到了下面的错误。
Traceback (most recent call last):
File "/usr/lib/cgi-bin/TestPy.py", line 3, in <module>
import lxml.etree as ET
ImportError: No module named lxml.etree
我的 CGI 配置如下: 文件名:serve-cgi-bin.conf
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
#AddHandler cgi-script .py
#Order allow,deny
#Allow from all
</Directory>
</IfDefine>
我的python代码如下:
#!/usr/bin/python
import lxml.etree as ET
import sys
print "Content-Type: text/plain\r\n\r\n"
print "Hello World!"
print "[" + sys.version + "]" + " [" + sys.prefix + "]"
#xml_filename='/var/www/htmprint/Water.xml'
#xsl_filename='/var/www/htmprint/Water.xsl'
#dom = ET.parse(xml_filename)
#xslt = ET.parse(xsl_filename)
#transform = ET.XSLT(xslt)
#newdom = transform(dom)
#print(ET.tostring(newdom, pretty_print=True))
我觉得 lxml.etree 文件的权限不太合适,但我无法弄清楚。
如果有人可以提供帮助,请提前致谢。
斌
【问题讨论】:
-
我也怀疑权限问题。首先,Apache 以不同的用户身份运行 CGI 脚本——Debian/Ubuntu 上的 www-data。尝试在该用户下的命令行中运行您的脚本:
su - www-data -c TestPy.py。 -
您好博士,按照您所说的进行了尝试,但 www-data 无法运行我的 TestPy.py。你能建议我应该做什么。我是否需要授予 www-data 才能访问“/home/MYNAME/.local/lib/python2.7/site-packages/”?谢谢
-
您最好将包安装到全局站点包,而不是您的个人空间 .local。但是,如果您希望 Apache 访问 .local — 是的,
chmod -R a+rX /home/MYNAME/.local/lib/python2.7/site-packages; chmod a+rX /home/MYNAME/.local/lib/python2.7; chmod a+rx /home/MYNAME/.local/lib; chmod a+rx /home/MYNAME/.local; chmod a+rx /home/MYNAME; chmod a+rx /home -
我已经使用命令 'sudo -H pip install lxml' 将 lxml 重新安装到全局站点包,它现在正在工作。非常感谢。如果您将其作为回复,我可以将其标记为答案。
标签: python cgi apache2-module