web-dev-qa-db-fra.com

RequestsDependencyWarning: urllib3 (1.9.1) ou chardet (2.3.0) ne correspond pas à une version prise en charge

J'ai trouvé plusieurs pages sur ce problème mais aucune d'elles n'a résolu mon problème.

Même si je fais un:

pip show

Je reçois :

/usr/local/lib/python2.7/dist-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.9.1) or chardet (2.3.0) doesn't match a supported version!
  RequestsDependencyWarning)
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 480, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2691, in load_entry_point
    return ep.load()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2322, in load
    return self.resolve()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2328, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 74, in <module>
    from pip.vcs import git, Mercurial, Subversion, Bazaar  # noqa
  File "/usr/lib/python2.7/dist-packages/pip/vcs/Mercurial.py", line 9, in <module>
    from pip.download import path_to_url
  File "/usr/lib/python2.7/dist-packages/pip/download.py", line 22, in <module>
    import requests, six
  File "/usr/local/lib/python2.7/dist-packages/requests/__init__.py", line 90, in <module>
    from urllib3.exceptions import DependencyWarning
ImportError: cannot import name DependencyWarning

Ce que j'ai fait :

pip install --upgrade chardet

mais comme expliqué, cela me donne la même erreur.

alors j'ai fait:

Sudo apt remove python-chardet

et désinstaller toutes ses dépendances . Après je le réinstaller -> le même: '(

J'ai fait la même chose pour python-pip. Après l'avoir réinstallé -> le même.

Voici les lignes sur les versions de urllib3 et chardet nécessaires: Extrait de /usr/local/lib/python2.7/dist-packages/requests/init. Py:

    # Check urllib3 for compatibility.
    major, minor, patch = urllib3_version  # noqa: F811
    major, minor, patch = int(major), int(minor), int(patch)
    # urllib3 >= 1.21.1, <= 1.22
    assert major == 1
    assert minor >= 21
    assert minor <= 22

    # Check chardet for compatibility.
    major, minor, patch = chardet_version.split('.')[:3]
    major, minor, patch = int(major), int(minor), int(patch)
    # chardet >= 3.0.2, < 3.1.0
    assert major == 3
    assert minor < 1
    assert patch >= 2


# Check imported dependencies for compatibility.
try:
    check_compatibility(urllib3.__version__, chardet.__version__)
except (AssertionError, ValueError):
    warnings.warn("urllib3 ({0}) or chardet ({1}) doesn't match a supported "
                  "version!".format(urllib3.__version__, chardet.__version__),
                  RequestsDependencyWarning)

Mes versions sont:

 ii  python-urllib3                                             
     1.9.1-3                                    all          HTTP library with thread-safe connection pooling for Python 
ii  python-chardet     
     2.3.0-1   

                             all          universal character encoding detector for Python2

Je n'ai plus d'idées ...

Merci à tous et désolé pour mon anglais :)

10
NuX_o

Vous avez une configuration mixte (apt et pip ont été utilisés pour installer l’ensemble du système, ce qui est commun), et cela ne correspond en effet pas aux versions prises en charge des modules requis par les demandes (et le pip v1.5.6 est également très ancien) .

La requests (quelle version? Restants probables de pip install) nécessite:
urllib3: 1.21.1 - 1.22
chardet: 3.0.2 - 3.1.0 

Tu as:
urllib3 (1.9.1) à partir du paquet debian python-urllib3 1.9.1-3
chardet (2.3.0) à partir du paquet Debian 2.3.0-1 de python-chardet 

Deux options: 

  • soit rétrograder requests à la version de votre distribution de système d'exploitation (voir ce qui est disponible avec apt show python-requests), ou à des versions plus anciennes sur pypi.org, ou 

  • ou installez urllib3 et chardet plus récents (vous pouvez télécharger les fichiers wheel manuellement à partir de pipy.org et faire pip install sur eux, y compris leurs dépendances), soit au niveau utilisateur (option --user pip install), soit dans un virtualenv.

Vous pouvez tout tester dans un virtualenv (apt show python-virtualenv). Il devrait même déployer un nouveau pip pour vous dans ses envs virtuels. Il est également possible d'installer un nouveau pip 10.0.1 au niveau utilisateur (--user) à côté de votre pip vendu par le système d'exploitation, mais vous devez être prudent . Bonne chance!

3
Alex

Cela est dû au module de requêtes différent installé par le système d'exploitation et aux dépendances python de votre installation locale.

Il peut être résolu en mettant à niveau les demandes:

pip install requests

ou

pip3 install requests
17
Joel G Mathew

Face à une erreur similaire lors de la mise à niveau vers urllib3 1.23. L'installation de l'ancienne version 1.22 a résolu cette erreur pour moi. 

Avez-vous fait pour installer l'ancienne version urllib3:

  1. pip uninstall urllib3
  2. pip install urllib3==1.22
2
Nafeez Quraishi

Cela a fonctionné pour moi. Il suffit d'exécuter les commandes ci-dessous.

$ Sudo pip uninstall requests

$ Sudo pip install requests

$ Sudo pip uninstall docopt

$ Sudo pip install docopt

Voici la référence lien pour plus de détails !

1
Saurabh

J'avais une version plus ancienne de requests.

Changer la version requests de 2.19.1 en 2.20.1 l’a résolu.

1
Eyal Levin

À tout moment, vérifiez que le code source est le bon moyen, en particulier lorsque le développeur a laissé des instructions claires dans les commentaires, comme dans ce cas. (Peut-être que l'auteur devrait être plus précis et le mettre dans le message d'erreur, oui)

Ouvrez vi /usr/lib/python2.7/site-packages/requests/__init__.py et recherchez check_compatibility(.

def check_compatibility(urllib3_version, chardet_version):
    urllib3_version = urllib3_version.split('.')
    assert urllib3_version != ['dev']  # Verify urllib3 isn't installed from git.

    # Sometimes, urllib3 only reports its version as 16.1.
    if len(urllib3_version) == 2:
        urllib3_version.append('0')

    # Check urllib3 for compatibility.
    major, minor, patch = urllib3_version  # noqa: F811
    major, minor, patch = int(major), int(minor), int(patch)
    # urllib3 >= 1.21.1, <= 1.24     <------------------ here
    assert major == 1
    assert minor >= 21
    assert minor <= 24

    # Check chardet for compatibility.
    major, minor, patch = chardet_version.split('.')[:3]
    major, minor, patch = int(major), int(minor), int(patch)
    # chardet >= 3.0.2, < 3.1.0     <------------------ and here
    assert major == 3
    assert minor < 1
    assert patch >= 2

Ensuite, vous connaissez la gamme de versions de urllib3 et chardet compatibles. Donc, vous essayez avec:

pip uninstall urllib3
pip install urllib3==1.24
pip uninstall chardet
pip install chardet==3.0.9 # this will fail, prompting the correct versions available, so you will try to install 3.0.4 instead
0
WesternGun