【问题标题】:How to get urllib3 and requests working with jython 2.7 beta 1?如何使用 jython 2.7 beta 1 获取 urllib3 和请求?
【发布时间】:2013-02-17 09:03:42
【问题描述】:

聪明的人,

我想在我的 jython 程序中使用很棒的请求模块。它在 python 中安装和运行得很好,但我无法在 jython 中安装它。我已经在 mac 和 ubuntu 上尝试了 Jython 2.7a2 和 2.7b1,并得到了与 urllib3 相关的相同错误。

How can I use jython setup.py install?中所述,首先安装ez_setup.py

然后在 jython bin 目录中运行 easy_install 会导致异常:

NameError: name 'CERT_NONE' is not defined
gautam-mbp:bin gautam$ ./easy_install requests
Searching for requests
Reading http://pypi.python.org/simple/requests/
Reading http://python-requests.org
Reading https://github.com/kennethreitz/requests
Best match: requests 1.1.0
Downloading http://pypi.python.org/packages/source/r/requests/requests-1.1.0.tar.gz#md5=a0158815af244c32041a3147ee09abf3
Processing requests-1.1.0.tar.gz
Running requests-1.1.0/setup.py -q bdist_egg --dist-dir /var/folders/jf/cb2pc45s7d94hd6sndysvyxw0000gn/T/easy_install-MnOao_/requests-1.1.0/egg-dist-tmp-E2Rkg1
Traceback (most recent call last):
  File "./easy_install", line 7, in <module>
    sys.exit(
  File "/Users/gautam/jython27b1/Lib/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 1712, in main
  File "/Users/gautam/jython27b1/Lib/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 1700, in with_ei_usage
  File "/Users/gautam/jython27b1/Lib/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 1712, in <lambda>
-----------lots of stack trace---------------
  File "setup.py", line 6, in <module>
  File "/var/folders/jf/cb2pc45s7d94hd6sndysvyxw0000gn/T/easy_install-MnOao_/requests-1.1.0/requests/__init__.py", line 52, in <module>
  File "/var/folders/jf/cb2pc45s7d94hd6sndysvyxw0000gn/T/easy_install-MnOao_/requests-1.1.0/requests/utils.py", line 23, in <module>
  File "/var/folders/jf/cb2pc45s7d94hd6sndysvyxw0000gn/T/easy_install-MnOao_/requests-1.1.0/requests/compat.py", line 7, in <module>
  File "/var/folders/jf/cb2pc45s7d94hd6sndysvyxw0000gn/T/easy_install-MnOao_/requests-1.1.0/requests/packages/__init__.py", line 3, in <module>
  File "/var/folders/jf/cb2pc45s7d94hd6sndysvyxw0000gn/T/easy_install-MnOao_/requests-1.1.0/requests/packages/urllib3/__init__.py", line 16, in <module>
  File "/var/folders/jf/cb2pc45s7d94hd6sndysvyxw0000gn/T/easy_install-MnOao_/requests-1.1.0/requests/packages/urllib3/connectionpool.py", line 45, in <module>
  File "/var/folders/jf/cb2pc45s7d94hd6sndysvyxw0000gn/T/easy_install-MnOao_/requests-1.1.0/requests/packages/urllib3/util.py", line 293, in <module>
NameError: name 'CERT_NONE' is not defined

看起来与 urllib3 相关的问题不适用于 jython。感谢您在获取请求(和 urllib3 )以处理 jython 方面的帮助。同样的错误也出现在 ubuntu 上。

谢谢 高塔姆

【问题讨论】:

标签: jython urllib3


【解决方案1】:

编辑:截至 2015 年 5 月,requests, 2.7.0 的当前稳定版本不再存在 Jython 中的原始错误 --Aprillion


您所面临的错误已在urllib3requests 的开发版本中修复。

由于您无法安装它,因为它会使用java.lang.RuntimeException: java.lang.RuntimeException: Class file too large! 炸毁 pip/easy_install,您必须直接从源代码树中运行它。

在那里,您可以通过将 requests/packages/urllib3/util.py 末尾的所有 ssl_wrap_socket 内容替换为以下虚拟方法来修复导入错误:

def ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None,
                    ca_certs=None, server_hostname=None,
                    ssl_version=None):
    raise Error('This is not meant to be called')

(如果您担心 ssl 支持:目前已损坏 anyways

由于 jython 是 missingidna 的支持,因此您也必须删除它。 转到 request/models.py 的第 290 行,将 'idna' 替换为 'utf-8'。

因此,如果您不需要使用 ssl 或 idna,这些步骤应该可以工作。

跟进: jython 中的相关 ssl 错误在此处跟踪:http://bugs.jython.org/issue2016

【讨论】:

  • 今天会试一试 - 你能给我一些关于如何安装 urllib3 和请求的开发版本的信息吗?
  • 你不需要开发版。下载tar.gz file from pypi,解压缩,然后修改文件 util.py 和 models,py ,如答案中所述。然后尝试将它与在解压缩请求的目录中启动的 jython 解释器一起使用。如果你想从其他地方使用它,你必须调整这个 pythons 路径,有文档。
  • 这很棒。刚刚使用Jython2.7b1requests-2.1.0 进行了测试。仍然需要修复idna 问题(现在在第 344 行)。但不再需要修复ssl_wrap_socket(虽然ssl在调用时仍然不起作用)。感谢您发布此答案。
【解决方案2】:

此问题已解决 - 请使用 Jython 2.7 beta 4(或最终版本)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 2015-10-25
  • 2022-12-11
相关资源
最近更新 更多