[Python-modules-team] Bug#766419: python3-requests: Version 2.4 of python-requests / python3-requests breaks virtualenv.

Daniele Tricoli eriol at mornie.org
Thu Oct 23 00:46:18 UTC 2014

Hello Nicolas,
thanks for the report!

On Thursday 23 October 2014 00:47:56 Nicolas CANIART wrote:
> The new version of python3-requests/python-requests (2.4.3) breaks
> pip which in turn breaks virtualenv (see bug #766261).

Yes, discovered myself, unfortunately!

> The request.compat module used to export a IncompleteRead
> module which virtualenv uses. But this symbol is no longer defined there
> and thus any package relying on it is prone to break.
> Temporarily removing this package from unstable or uploading a version
> of the package that is patched so it exports the symbol in question
> again, seems advisable considering the amount of reverse dependency
> this package has (a quick grep in /usr/lib/python3/dist-package show
> no other package on my system but I have only a few of those reverse
> dependencies installed).

I prefer to patch requests, because I want 2.4.3-1 in Jessie.

Fortunally, accordingly to codesearch.d.n:

few packages use requests.compat.

python-pip seems to be the only package to break since the only difference 
between v2.3.0 and v2.4.3 is:

$ git diff v2.3.0 v2.4.3 requests/compat.py
diff --git a/requests/compat.py b/requests/compat.py
index bdf10d6..be5a1ed 100644
--- a/requests/compat.py
+++ b/requests/compat.py
@@ -75,7 +75,9 @@ is_solaris = ('solar==' in str(sys.platform).lower())   # 
Complete guess.

     import simplejson as json
-except ImportError:
+except (ImportError, SyntaxError):
+    # simplejson does not support Python 3.2, it thows a SyntaxError
+    # because of u'...' Unicode literals.
     import json

 # ---------
@@ -90,7 +92,6 @@ if is_py2:
     from Cookie import Morsel
     from StringIO import StringIO
     from .packages.urllib3.packages.ordered_dict import OrderedDict
-    from httplib import IncompleteRead

     builtin_str = str
     bytes = str
@@ -106,7 +107,6 @@ elif is_py3:
     from http.cookies import Morsel
     from io import StringIO
     from collections import OrderedDict
-    from http.client import IncompleteRead

     builtin_str = str
     str = str

So I'm going to patch requests to export IncompleteRead form the httplib 
module (httplib is a module of the Python standard library so it will be a 
trivial patch) both for Python 2 and Python 3.

> Looking at pip source code on [1], it seems this symbol is no longer
> used so you may also want to coordinate with the pip maintainer
> (there are no newer release of pip, as of today).

Well, I will fix on requests side just know, since the freeze is around the 
corner, but I'm not contrary on coordinate with the pip maintainer! ;)
I will also add to my workflow testing pip after running requests' tests: they 
need Internet connection so I run them manually.


 Daniele Tricoli 'Eriol'

More information about the Python-modules-team mailing list