It's possible to use requests in ironpython 2.7.5?

匿名 (未验证) 提交于 2019-12-03 09:05:37

问题:

I've successful installed pip on ironpython. But when i try to install requests with "ipy.exe -X:Frames -m pip install requests" in a administrator console I get the following:

------------------------------------------------------------ C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\__main__.py run on 02/02/16 16:13:53 Downloading/unpacking html5lib   Getting page https://pypi.python.org/simple/html5lib/ Cleaning up...   Removing temporary dir c:\users\panta\appdata\local\temp\pip_build_panta... Exception: Traceback (most recent call last):   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\basecommand.py", line 122, in main     status = self.run(options, args)   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\commands\install.py", line 278, in run     requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\req.py", line 1183, in prepare_files     url = finder.find_requirement(req_to_install, upgrade=self.upgrade)   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\index.py", line 194, in find_requirement     page = self._get_page(main_index_url, req)   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\index.py", line 566, in _get_page     return HTMLPage.get_page(link, req,   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\index.py", line 670, in get_page     resp = session.get(url, headers={"Accept": "text/html"})   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\_vendor\requests\sessions.py", line 468, in get     return self.request('GET', url, **kwargs)   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\download.py", line 237, in request     return super(PipSession, self).request(method, url, *args, **kwargs)   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\_vendor\requests\sessions.py", line 456, in request     resp = self.send(prep, **send_kwargs)   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\_vendor\requests\sessions.py", line 559, in send     r = adapter.send(request, **kwargs)   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\_vendor\requests\adapters.py", line 317, in send     resp = conn.urlopen(   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\_vendor\requests\packages\urllib3\connectionpool.py", line 491, in urlopen     httplib_response = self._make_request(conn, method, url,   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\_vendor\requests\packages\urllib3\connectionpool.py", line 291, in _make_request     conn.request(method, url, **httplib_request_kw)   File "C:\Program Files (x86)\IronPython 2.7\Lib\httplib.py", line 955, in request     self._send_request(method, url, body, headers)   File "C:\Program Files (x86)\IronPython 2.7\Lib\httplib.py", line 989, in _send_request     self.endheaders(body)   File "C:\Program Files (x86)\IronPython 2.7\Lib\httplib.py", line 951, in endheaders     self._send_output(message_body)   File "C:\Program Files (x86)\IronPython 2.7\Lib\httplib.py", line 811, in _send_output     self.send(msg)   File "C:\Program Files (x86)\IronPython 2.7\Lib\httplib.py", line 773, in send     self.connect()   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\_vendor\requests\packages\urllib3\connection.py", line 197, in connect     match_hostname(self.sock.getpeercert(),   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\pip\_vendor\requests\packages\urllib3\packages\ssl_match_hostname\_implementation.py", line 88, in match_hostname     for key, value in sub: ValueError: too many values to unpack

So, there is some way to install requests on ironpython now that supports pip? I tried using (in administrator console):

  • ipy.exe -X:Frames -m pip install requests
  • ipy.exe -X:FullFrames -m pip install requests
  • ipy.exe -m pip install requests
  • ipy.exe -X:Frames Scripts\pip2.7.exe install requests
  • ipy.exe -X:FullFrames Scripts\pip2.7.exe install requests
  • ipy.exe -X:FullFrames Scripts\pip2.exe install requests
  • ipy.exe -X:FullFrames Scripts\easy_install-2.7.exe requests

An when i try "ipy.exe -X:FullFrames -m easy_install requests" i get:

C:\Program Files (x86)\IronPython 2.7\Lib\weakref.py:1: DeprecationWarning: object.__init__() takes no parameters for type KeyedRef   """Weak reference support for Python. Searching for requests Reading https://pypi.python.org/simple/requests/ Best match: requests 2.9.1 Downloading https://pypi.python.org/packages/source/r/requests/requests-2.9.1.tar.gz#md5=0b7f480d19012ec52bab78292efd976d Processing requests-2.9.1.tar.gz Writing c:\users\panta\appdata\local\temp\easy_install-mbdcgv\requests-2.9.1\setup.cfg Running requests-2.9.1\setup.py -q bdist_egg --dist-dir c:\users\panta\appdata\local\temp\easy_install-mbdcgv\requests-2.9.1\egg-dist-tmp-rzrv6w warning: build_py: byte-compiling is disabled, skipping.  warning: install_lib: byte-compiling is disabled, skipping.  warning: easy_install: byte-compiling is disabled, skipping.

An it creates the folder C:\Users\panta\AppData\Local\Temp\easy_install-mbdcgv\requests-2.9.1 with a setup.py but when I try to run, it gives an error "No commands supplied". So, there is a way to import requests on ironpython 2.7.5?

EDIT:Now with easy_install it "worked" but when i try to "import requests" i receive the following:

>>> import requests Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\requests-2.9.1-py2.7.egg\requests\__init__.py", line 53, in <module>   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\requests-2.9.1-py2.7.egg\requests\packages\__init__.py", line 27, in <module>   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\requests-2.9.1-py2.7.egg\requests\packages\urllib3\__init__.py", line 8, in <module>   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\requests-2.9.1-py2.7.egg\requests\packages\urllib3\connectionpool.py", line 34, in <module>   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\requests-2.9.1-py2.7.egg\requests\packages\urllib3\packages\six.py", line 330, in <module>   File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\requests-2.9.1-py2.7.egg\requests\packages\urllib3\packages\six.py", line 320, in exec_ AttributeError: 'module' object has no attribute '_getframe'

So, no requests module for ironpython?

回答1:

Unfortunately, the six library used by urllib3 (in turn used by requests) is not compatible with IronPython. See issue 135 in the six project tracker, which may have a work-around.

Apparently, that's the only thing standing in the way of IronPython-compatibility, see issue #2324 in the requests issue tracker.

You probably could make it work by replacing the definition for exec_() with calls directly to exec(), in the six module. urllib3 doesn't actually use any calls to six.exec_() anyway, and exec() works just fine in Python 2 code.



回答2:

I believe it works at least for trivial cases.

My exact install command is:

ipy.exe -X:Frames -m pip install --user requests

And the example session right after:

c:\cygwin64\home\rejap>ipy -X:Frames IronPython 2.7.5 (2.7.5.0) on .NET 4.0.30319.42000 (32-bit) Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>> r=requests.get('http://google.com') C:\Users\rejap\AppData\Roaming\Python\IronPython27\site-packages\requests\packages\urllib3\connectionpool.py:1: DeprecationWarning: object.__new__() takes no parameters from __future__ import absolute_import >>> r <Response [200]> >>>


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!