在Jython 2.2中使用urllib2

3 投票
1 回答
1355 浏览
提问于 2025-04-16 00:27

我正在使用一个内置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

并重启服务器实例来解决这个问题。现在,基础设施的组件应该能使用默认模块了。

如果这样能解决你的问题,请告诉我,我会尽快处理这个问题。

撰写回答