私のPythonの requests ライブラリのインストールは数か月間完全に機能しており、今日は中断することにしました。
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/requests/__init__.py", line 58, in <module>
from . import utils
File "/usr/local/lib/python2.7/dist-packages/requests/utils.py", line 26, in <module>
from .compat import parse_http_list as _parse_list_header
File "/usr/local/lib/python2.7/dist-packages/requests/compat.py", line 7, in <module>
from .packages import chardet
File "/usr/local/lib/python2.7/dist-packages/requests/packages/__init__.py", line 3, in <module>
from . import urllib3
File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/__init__.py", line 10, in <module>
from .connectionpool import (
File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py", line 37, in <module>
from .request import RequestMethods
File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/request.py", line 6, in <module>
from .filepost import encode_multipart_formdata
File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/filepost.py", line 8, in <module>
from .fields import RequestField
File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/fields.py", line 1, in <module>
import email.utils
ImportError: No module named utils
utils
の呼び出しの問題は、Python 2.7の email モジュールに関連しています
>>> import email
>>> import email.utils
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named utils
utils
は明らかにPythonのemail
ライブラリの一部ですが、アクセスすることはできません。アンインストールして再インストールした場合:
$ Sudo pip install email
Collecting email
Downloading email-4.0.2.tar.gz (1.2MB)
100% |████████████████████████████████| 1.2MB 286kB/s
Installing collected packages: email
Running setup.py install for email
Successfully installed email-4.0.2
すべての最悪utils.py
は実際に存在します。何が悪いのですか?
$ ls /usr/local/lib/python2.7/dist-packages/email/
base64mime.py errors.py header.py message.py parser.pyc
base64mime.pyc errors.pyc header.pyc message.pyc quoprimime.py
charset.py feedparser.py __init__.py mime quoprimime.pyc
charset.pyc feedparser.pyc __init__.pyc _parseaddr.py test
encoders.py generator.py iterators.py _parseaddr.pyc utils.py
encoders.pyc generator.pyc iterators.pyc parser.py utils.pyc
ほとんどの場合、モジュール検索パス(現在の作業ディレクトリを含む)にある独自のモジュールの1つは、実際にはemail
と呼ばれます。これにより、Pythonが代わりにそのモジュールを取得し、標準ライブラリからemail
モジュールをシャドウして、インポートエラーが発生します。
そのモジュールの名前を別の名前に変更すれば、問題ないはずです。