web-dev-qa-db-ja.com

pythonファイルにAttributeErrorが表示されています:モジュール 'http'に属性 'client'がありません

次のPythonスクリプトがあります:

import http
import requests
from bs4 import BeautifulSoup
import urllib3
import pyrebase
import numpy as np
import yagmail
import time
from datetime import datetime, timedelta
import sys
import logging
import colorama
import csv
from random import randint
from numpy import genfromtxt
import sched, time
import threading
import http.client

import firebase_admin
from firebase_admin import credentials
from firebase_admin import db


# Fetch the service account key JSON file contents
cred = credentials.Certificate('service-account-credentials.json')
# Initialize the app with a service account, granting admin privileges
firebase_admin.initialize_app(cred, {
    'databaseURL': 'https://werrwrrw-catalogue.firebaseio.com'
})


config = {
    "apiKey": "BiXzaSdwhjwrhwjjrhwr",
    "authDomain": "whjwrhwjjrhwr.firebaseapp.com",
    "databaseURL": "https://whjwrhwjjrhwr.firebaseio.com",
    "projectId": "whjwrhwjjrhwr",
    "storageBucket": "rewrrrrr.appspot.com",
    "messagingSenderId": "606543434441"
}



firebaseuser = pyrebase.initialize_app(config)

auth = firebaseuser.auth()
dbuser = firebaseuser.database()

subref = db.reference('Subcribers').get()

for key, val in subref.items():
    subcriber_email = val['Email']
    print(key,subcriber_email)

pythonファイルは以前は正常に機能していましたが、実行しようとすると、次のエラーが表示されます。

>>Traceback (most recent call last):
  File "fax.py", line 1, in <module>
    import requests
  File "/Users/name/anaconda/lib/python3.6/site-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/Users/name/anaconda/lib/python3.6/site-packages/urllib3/__init__.py", line 8, in <module>
    from .connectionpool import (
  File "/Users/name/anaconda/lib/python3.6/site-packages/urllib3/connectionpool.py", line 11, in <module>
    from .exceptions import (
  File "/Users/name/anaconda/lib/python3.6/site-packages/urllib3/exceptions.py", line 2, in <module>
    from .packages.six.moves.http_client import (
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 646, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 616, in _load_backward_compatible
  File "/Users/name/anaconda/lib/python3.6/site-packages/urllib3/packages/six.py", line 203, in load_module
    mod = mod._resolve()
  File "/Users/name/anaconda/lib/python3.6/site-packages/urllib3/packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/Users/name/anaconda/lib/python3.6/site-packages/urllib3/packages/six.py", line 82, in _import_module
    __import__(name)
  File "/Users/name/anaconda/lib/python3.6/http/client.py", line 71, in <module>
    import email.parser
  File "/Users/name/Desktop/Google Drive/FEBB/serverless/crwlr/email.py", line 3, in <module>
    from bs4 import BeautifulSoup
  File "/Users/name/anaconda/lib/python3.6/site-packages/bs4/__init__.py", line 35, in <module>
    from .builder import builder_registry, ParserRejectedMarkup
  File "/Users/name/anaconda/lib/python3.6/site-packages/bs4/builder/__init__.py", line 323, in <module>
    from . import _html5lib
  File "/Users/name/anaconda/lib/python3.6/site-packages/bs4/builder/_html5lib.py", line 20, in <module>
    import html5lib
  File "/Users/name/anaconda/lib/python3.6/site-packages/html5lib/__init__.py", line 19, in <module>
    from .serializer import serialize
  File "/Users/name/anaconda/lib/python3.6/site-packages/html5lib/serializer/__init__.py", line 5, in <module>
    from .htmlserializer import HTMLSerializer
  File "/Users/name/anaconda/lib/python3.6/site-packages/html5lib/serializer/htmlserializer.py", line 15, in <module>
    from xml.sax.saxutils import escape
  File "/Users/name/anaconda/lib/python3.6/xml/sax/saxutils.py", line 6, in <module>
    import os, urllib.parse, urllib.request
  File "/Users/name/anaconda/lib/python3.6/urllib/request.py", line 1350, in <module>
    if hasattr(http.client, 'HTTPSConnection'):
AttributeError: module 'http' has no attribute 'client'

エラーを正確に特定することはできません。上記のトレースバックに基づいてエラーを修正するにはどうすればよいですか?

10
learner101

ここに:

File "/Users/name/anaconda/lib/python3.6/http/client.py", line 71, in <module>
    import email.parser
File "/Users/name/Desktop/Google Drive/FEBB/serverless/crwlr/email.py"
    from bs4 import BeautifulSoup

/ Users/name/Desktop/Google Drive/FEBB/serverless/crwlr /のローカルemail.pyは、stdlibのものをシャドウします。ローカルのemail.pyモジュールで、html5libをインポートするbs4をインポートしています。これは、httpをインポートするurllib.requestをインポートするxml.sax.saxutilsをインポートします。

IOWは(偶発的な)循環依存関係に陥ります。この時点では、httpモジュールは部分的にしかインポートされておらず、「クライアント」がまだ定義されていないため、エラーが発生します。

簡単な解決策は、「email.py」モジュールの名前を別の名前に変更するか、(それがスクリプトであり、モジュールではない場合)pythonpathから移動することです。

編集:私はあなたのコードがhttpをインポートすることから始まったことに気づきました、それでhttpモジュールはすでに完全にロードされているはずですので、たとえemail.pyスクリプト/モジュールの問題を修正する必要があります。これでこの問題が発生することはありません。したがって、http.pyにstdlibのsys.pathモジュールまたはhttpパッケージが含まれている可能性があります。これをデバッグするには、import httpの直後に次の行を追加します。

 print(http)

これは次のように表示されます:

<module 'http' from '/some/path/to/a/python/file.pyc`>

パスがあなたのpython install stdlib's "http/init。pyc")へのパスではない場合、攻撃者を見つけました。それが独自のスクリプト/モジュールの1つである場合、修正はemail.pyの場合と同じです。

6

Bs4が例外を発生させている可能性があります。既存のスクリプトで以下のスクリプトを実行して、Bs4インポートが正常に機能していることを確認してください

try:
    from bs4 import BeautifulSoup
except Exception as err:
    raise ImportError('Bs4 is not imported correctly. - {}'.format(err))
1