web-dev-qa-db-fra.com

'L'objet de module n'a pas d'attribut' get 'Python error Requests?

je viens d'installer le module Requests en utilisant 'easy_insatll' et j'ai essayé de lancer le code de démonstration de ce tutrorial ,

import requests
payload = {'username': 'xxxx', 'password': 'xxxxx'}
r = requests.get('https://github.com/timeline.json')

mais j'obtiens cette erreur: AttributeError: 'module' object has no attribute 'get'

une idée? merci

17
mojians

Vous importez tous les noms du module requests dans votre espace de noms local, ce qui signifie que vous n'avez plus besoin de les préfixer avec le nom du module:

>>> from requests import *
>>> get
<function get at 0x107820b18>

Si vous deviez importer le module avec une instruction import requests, vous avez ajouté le module lui-même à votre espace de noms et vous devez utiliser le nom complet:

>>> import requests
>>> requests.get
<function get at 0x102e46b18>

Notez que les exemples ci-dessus sont ce que j'ai obtenu de mes tests dans l'interprète. Si vous obtenez des résultats différents, vous importez le mauvais module. vérifiez si vous avez un fichier requests.py supplémentaire dans votre paquet python:

>>> import requests
>>> print requests.__file__
/private/tmp/requeststest/lib/python2.7/site-packages/requests/__init__.pyc

Vous pouvez également tester la liste de noms fournie par le module requests:

>>> print dir(requests)
['ConnectionError', 'HTTPError', 'Request', 'RequestException', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__build__', '__builtins__', '__copyright__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__version__', '_oauth', 'api', 'auth', 'certs', 'codes', 'compat', 'cookies', 'defaults', 'delete', 'exceptions', 'get', 'head', 'hooks', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'safe_mode', 'session', 'sessions', 'status_codes', 'structures', 'utils']
10
Martijn Pieters

Il s'agit du symptôme typique d'un fichier requests.py (ou requests.pyc) non associé, situé dans votre répertoire actuel ou à un autre emplacement de la PYTHONPATH. Si tel est le cas, supprimez-le ou renommez-le, car il cache le module que vous souhaitez réellement importer.

21
user4815162342

Vous devez choisir des variantes pour résoudre ce problème.

import requests

ou 

r = get('https://github.com/timeline.json')

P.S. Le premier est préférable

3
Alexey Kachayev

Comme déjà indiqué, le problème le plus courant est que vous avez un fichier requests.py quelque part dans votre PYTHONPATH.

Mais comme le module de requêtes utilise en interne d’autres modules (par exemple, à partir de la bibliothèque standard Python), il peut aussi y avoir des problèmes avec d’autres noms de fichiers. Par exemple, j'ai eu le même problème lorsque j'ai nommé un script http.py. Dans ce cas, la sortie de print dir(requests) est correcte, ce qui rend la recherche de l'erreur un peu plus difficile ...

3
dsager

J'ai fait une erreur en indiquant que le nom du fichier de test était requests.py . Ainsi, lorsque j'importe requests.py, ce n'est pas ce que je veux importer . Ensuite, j'ai renommé le nom du fichier de test. Ça marche!!!

3
DanielChase

J'ai eu la même erreur.

Tout ce que j'ai fait était de le sauvegarder sous le nom requests.py

Ensuite, je l’ai sauvegardé sous un autre nom ..__ et le problème a été résolu.

2
Vaibhav Shah

Cela pourrait être une erreur de l'utilisateur si vous travaillez avec un framework tel que Django qui contient également des objets de requête.

Django's m'embrouille constamment:

request.POST

et request 's:

request.post

C'était mon problème, de toute façon. Préparer pour les votes bas.

1
mlissner

Je suis arrivé le même problème sur Mac et Ubuntu. Je veux tester la commande de demandes. J'ai utilisé le nom du dossier request/et le requests.py filename sur Mac. Mais Python affiche le message "ImportError: impossible d'importer le nom obtenir" . Par conséquent, j'ai renommé les demandes/dossier et le fichier requests.py en test-request/et test-requests.py. Il a toujours reçu le message. J'ai vérifié le dossier comme ci-dessous: 

__pycache__     requests.pyc        test-1.py       test-requests.py

J'ai vu que le dossier a le fichier requests.pyc. J'ai donc supprimé le fichier requests.pyc du dossier. Ensuite, j'ai exécuté le script de test ci-dessous. ça marche maintenant.

$ python test-requests.py 
200

#! /usr/bin/env python
# the content of test-requests.py
import requests
from requests import get
r = requests.get('http://httpbin.org/get')
print (r.status_code)
0
Shirley