【问题标题】:python file is showing AttributeError: module 'http' has no attribute 'client'python文件显示AttributeError:模块'http'没有属性'client'
【发布时间】:2019-01-28 12:46:24
【问题描述】:

我有以下 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'

我无法确定错误所在。如何根据上面的回溯阅读修复错误?

【问题讨论】:

  • import urllib; urllib.request.http.client 适合我。您的项目目录中是否有一个名为 http 的文件/文件夹。它应该打开位于anaconda/lib/python3.6/http 的那个。
  • @FHTMitchell 我如何才能确定要重新安装它?
  • http 是 python stdlib 的一部分,您必须完全重新安装 anaconda。不过我不会打扰,这可能不是问题
  • 在 Python 提示符下尝试import http; print(http.__file__)。甚至在评论行python3 -c "import http; print(http.__file__)"
  • File "/Users/name/Desktop/Google Drive/FEBB/serverless/crwlr/email.py", line 3, in &lt;module&gt; from bs4 import BeautifulSoup 如果您的工作目录或同一环境中有任何本地http.py。请将其重命名为http_lib.py。有很多机会通过我们自己的库文件来隐藏 python 库文件。

标签: python python-3.x http anaconda traceback


【解决方案1】:

我碰巧有一个名为email.py的本地模块文件,称为requests的导入错误。

参考:Python modules with identical names (i.e., reusing standard module names in packages)

【讨论】:

    【解决方案2】:

    这里:

    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 模块中,你正在导入 bs4,它导入 html5lib,它导入 xml.sax.saxutils,它导入 urllib.request,它要导入 http

    IOW 你最终会得到一个(意外的)循环依赖。此时 http 模块只是部分导入,还没有定义“客户端”,因此出现错误。

    简单的解决方案是将您的“email.py”模块重命名为其他名称,或者(如果它只是一个脚本而不是模块)将它移出您的 pythonpath。

    编辑:我刚刚注意到您的代码是通过导入 http 开始的,所以 http 模块 应该 已经完全加载,所以即使您的 email.py 脚本/模块的问题需要修复,这不应该 导致这个问题。因此,您的sys.path 中可能还有另一个http.py 模块或http 包来遮蔽stdlib 的包。要对此进行调试,请在 import http 之后添加这一行:

     print(http)
    

    这应该打印如下内容:

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

    如果路径不是您的 python 安装 stdlib 的“http/init.pyc”的路径,那么您找到了违规者。如果它是您自己的脚本/模块之一,则修复与email.py 相同。

    【讨论】:

      【解决方案3】:

      所以

      >>> import http
      >>> import http.client
      >>> if hasattr(http.client, 'HTTPSConnection'):
      ...     print (type(http.client))
      ... 
      <class 'module'>
      >>> 
      

      http.client 应该是模块,它不应该在http 实例上调用client 属性,对吧?

      解决方案 - 我不知道 :)

      【讨论】:

      • 如果您不知道为什么要发布答案?
      • 我试图将 http.client 作为模块聚焦。这可以提供很好的线索。不需要知道完整的解决方案或不需要发布解决方案。一两条线索也足够了。
      【解决方案4】:

      可能是 Bs4 引发异常,请在现有脚本中执行以下脚本验证 Bs4 导入是否正常

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

      【讨论】:

      • 仍然得到这个“AttributeError: module 'http' has no attribute 'client'”
      【解决方案5】:

      我自己不是专家,但请在第一行尝试这样做

      import http as http_
      

      因为我在错误消息中看到 python is trying to get client from http module
      我猜这是因为有 http 模块和 http 文件夹,其中文件夹包含其他模块(如客户端)

      【讨论】:

      • 它不会改变任何东西
      • 当然它不会改变任何东西 - 更改绑定模块的名称不会影响导入哪个模块/包。
      猜你喜欢
      • 1970-01-01
      • 2022-07-23
      • 2022-11-05
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 2023-04-06
      相关资源
      最近更新 更多