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'
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']
これは、現在のディレクトリまたはPYTHONPATH
のどこかにある無関係なrequests.py
(またはrequests.pyc
)ファイルの典型的な症状です。この場合、本当にインポートしたいモジュールをシャドウイングしているため、削除するか名前を変更します。
同じエラーが発生しました。
requests.py
として保存するだけでした
次に、別の名前で保存しました。そして問題は解決しました。
これを修正する方法のバリエーションが必要です。
import requests
または
r = get('https://github.com/timeline.json')
追伸最初のものが好ましい
すでに述べたように、最も一般的な問題は、PYTHONPATH
のどこかにrequests.py
ファイルがあることです。
ただし、requestsモジュールは内部で他のモジュールを使用しているため(たとえば、標準のpythonライブラリから)、他のファイル名にも問題がある可能性があります。たとえば、スクリプトhttp.py
。その場合、print dir(requests)
の出力は正しいため、エラーの追跡が少し難しくなります...
テストファイルの名前がrequests.pyであると間違えました。したがって、requests.pyをインポートするとき、インポートしたいものではありません。次に、テストファイルの名前を変更しました。できます!!!
Djangoのようにリクエストオブジェクトもあるフレームワークで作業している場合、これはユーザーエラーになる可能性があります。
私は常にDjangoに混乱しています:
request.POST
およびrequest
's:
request.post
とにかくそれが私の問題でした。賛成票を控える。
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)