web-dev-qa-db-ja.com

「モジュールオブジェクトには属性「get」がありませんPython error Requests?

easy_installを使用してRequestsモジュールをインストールしたばかりで、この tutorial のデモコードを実行しようとしました。

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

しかし、私はこのエラーを受け取ります:

AttributeError:'module' object has no attribute 'get'

23
mojians

requestsモジュールからすべての名前をローカルネームスペースにインポートするため、モジュール名をプレフィックスとして付ける必要がなくなります。

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

代わりにimport requestsステートメントを使用してモジュールをインポートする場合、モジュール自体をネームスペースに追加し、フルネームを使用する必要があります。

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

上記の例は、インタープリターでのテストから得たものです。異なる結果が得られる場合、間違ったモジュールをインポートしています。 pythonパッケージに追加のrequests.pyファイルがあるかどうかを確認します。

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

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']
13
Martijn Pieters

これは、現在のディレクトリまたはPYTHONPATHのどこかにある無関係なrequests.py(またはrequests.pyc)ファイルの典型的な症状です。この場合、本当にインポートしたいモジュールをシャドウイングしているため、削除するか名前を変更します。

25
user4815162342

同じエラーが発生しました。

requests.pyとして保存するだけでした

次に、別の名前で保存しました。そして問題は解決しました。

6
Vaibhav Shah

これを修正する方法のバリエーションが必要です。

import requests

または

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

追伸最初のものが好ましい

4
Alexey Kachayev

すでに述べたように、最も一般的な問題は、PYTHONPATHのどこかにrequests.pyファイルがあることです。

ただし、requestsモジュールは内部で他のモジュールを使用しているため(たとえば、標準のpythonライブラリから)、他のファイル名にも問題がある可能性があります。たとえば、スクリプトhttp.py 。その場合、print dir(requests)の出力は正しいため、エラーの追跡が少し難しくなります...

4
dsager

テストファイルの名前がrequests.pyであると間違えました。したがって、requests.pyをインポートするとき、インポートしたいものではありません。次に、テストファイルの名前を変更しました。できます!!!

3
DanielChase

Djangoのようにリクエストオブジェクトもあるフレームワークで作業している場合、これはユーザーエラーになる可能性があります。

私は常にDjangoに混乱しています:

request.POST

およびrequest 's:

request.post

とにかくそれが私の問題でした。賛成票を控える。

1
mlissner

MacとUbuntuで同じ問題が発生しました。要求コマンドをテストしたい。 Macではrequests /フォルダー名とrequests.pyファイル名を使用しました。しかし、Pythonは「ImportError:name getをインポートできません」というメッセージを表示します。したがって、requests /フォルダーとrequests.pyファイルの名前をtest-requests /およびtest-requests.pyに変更しました。それでもメッセージが表示されるので、次のようにフォルダを確認しました。

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

フォルダーにrequests.pycファイルがあることがわかりました。そのため、フォルダー内のrequests.pycファイルを削除しました。次に、以下のテストスクリプトを実行しました。現在は機能しています。

$ 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