在Jython 2.2中使用urllib2
我正在使用一个内置Jython 2.2的产品。这个版本没有包含任何Python的标准库。当我运行这个Jython实例时,默认的路径是
['./run/Jython/Lib', './run/Jython', '__classpath__']
我把Python 2.2的所有.py模块文件都放到了./run/Jython/Lib目录下,现在可以导入它们了。但是我想使用urllib2,却遇到了这个错误:
Traceback (innermost last):
File "<string>", line 2, in ?
File "./run/Jython/Lib/urllib2.py", line 90, in ?
File "./run/Jython/Lib/socket.py", line 41, in ?
ImportError: no module named _socket
根据我的了解,_socket模块是Python lib-dynload库的一部分(_socket.so)。Jython能使用这个文件吗?我试着把它放到我的路径里,但没有任何效果。
在谷歌搜索中,我发现其他人似乎能在Jython 2.2中使用urllib和urllib2,但我却卡住了。我也尝试过使用旧版本和新版本的Python模块库。
谢谢!
1 个回答
2
安迪,
我安装了干净的 Jython 2.2.1,并成功运行了以下脚本。
$ ./jython
Jython 2.2.1 on java1.6.0_17
Type "copyright", "credits" or "license" for more information.
>>> import urllib2
>>> f = urllib2.urlopen('http://www.python.org/')
>>> print f.read(100)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm
>>>
我回去检查了一下 Meandre 的基础代码,发现嵌入的 Jython 路径里做了一些小修改。不过,这不是主要问题。主要的问题是我刚意识到,Meandre 的发行包里缺少了 Jython 的系统模块。
你可以通过手动将以下内容复制到
<JYTHON_HOME>/lib
然后再到
<MEANDRE_HOME>/run/Jython/Lib
并重启服务器实例来解决这个问题。现在,基础设施的组件应该能使用默认模块了。
如果这样能解决你的问题,请告诉我,我会尽快处理这个问题。