Apache2 / Python CGI:Web访问时的ImportError,但可以从命令行运行

时间:2014-08-26 02:27:42

标签: python apache opencv cgi

我有一个python CGI脚本我试图在共享主机上运行cv2.py。我把所有东西都放在命令行中但是当我把它带到CGI时它在cv2上得到一个importerror。

这是一个特殊的Apache安装,因为我的Python版本2.7.2不是默认的Python版本,所有的网站包都安装在我的用户主目录中。

以下是代码:

#!/path/to/bin/python
import cgi
import cgitb
import sys
version = sys.version
cgitb.enable()
path = sys.path
import os
import pwd
# import cv2  << this is the line that causes the error from the web

def get_username():
    return pwd.getpwuid( os.getuid() )[ 0 ]
print "Content-Type: text/html"
print
print "<h1>%s</h1>" % version
print "<h1>%s</h1>" % path
print "<h1>%s</h1>" % get_username()

最奇怪的部分是,从Web服务器运行的用户名,路径和版本与从命令行运行的用户名,路径和版本完全相同。从命令行,cv2可以正常导入和使用,但是从web,同一个文件获取importError尝试导入cv2:

    cv2 undefined
<type 'exceptions.ImportError'>: numpy.core.multiarray failed to import 
      args = ('numpy.core.multiarray failed to import',) 
      message = 'numpy.core.multiarray failed to import'

如果我尝试导入numpy或Image(PIL),我会得到一个memoryError:

<type 'exceptions.MemoryError'>: 
  args = () 
  message = ''

我想知道是否存在任何其他可能导致导入错误的Web服务器配置问题,当所有内容都从命令行运行并且看起来配置与不起作用的Web完全相同时?< / p>

1 个答案:

答案 0 :(得分:0)

所以我对memoryError进行了更深入的搜索,并通过修改ctypes / init .py来找到这个模糊的解决方案,在这种情况下似乎已经完成了这个技巧:

https://stackoverflow.com/a/6769624/895656

这似乎是numpy 1.8.2

版本中的一个错误