Python Google API出现故障-导入错误:无法导入名称';构建';

Python Google API出现故障-导入错误:无法导入名称';构建';,python,google-calendar-api,google-api-python-client,Python,Google Calendar Api,Google Api Python Client,起初,我希望我能在互联网上的任何地方找到这个问题,但我搜索了一段时间,没有找到有类似问题的人。当我尝试运行GoogleAppClient模块时,它在某个地方出现了故障,我不确定出了什么问题。 为了测试它,我已经开始运行以下文件: 导入GoogleAppClient 打印(“第一步!”) 导入GoogleAppClient.discovery 打印(“第二步!”) 从GoogleAppClient.discovery导入生成 打印('耶!所有步骤都完成!') 第一次导入进行得很顺利,因为第一个p

起初,我希望我能在互联网上的任何地方找到这个问题,但我搜索了一段时间,没有找到有类似问题的人。当我尝试运行
GoogleAppClient
模块时,它在某个地方出现了故障,我不确定出了什么问题。 为了测试它,我已经开始运行以下文件:

导入GoogleAppClient
打印(“第一步!”)
导入GoogleAppClient.discovery
打印(“第二步!”)
从GoogleAppClient.discovery导入生成
打印('耶!所有步骤都完成!')
第一次导入进行得很顺利,因为第一个print语句已成功生成。然而,在那之后,一切似乎都出了问题

Step one!
Traceback (most recent call last):
  File "c:/Users/Bram/Documents/My Project/src/test.py", line 3, in <module>
    import googleapiclient.discovery
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\site-packages\googleapiclient\discovery.py", line 32, in <module>
    from six.moves import http_client
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\site-packages\six.py", line 92, in __get__
    result = self._resolve()
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\site-packages\six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\site-packages\six.py", line 82, in _import_module
    __import__(name)
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\http\client.py", line 71, in <module>
    import email.parser
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\_policybase.py", line 9, in <module>
    from email.utils import _has_surrogates
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\utils.py", line 33, in <module>
    from email._parseaddr import quote
  File "C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\_parseaddr.py", line 16, in <module>
    import time, calendar
  File "c:\Users\Bram\Documents\My Project\src\calendar.py", line 5, in <module>
    from googleapiclient.discovery import build
ImportError: cannot import name 'build'
第一步!
回溯(最近一次呼叫最后一次):
文件“c:/Users/Bram/Documents/My Project/src/test.py”,第3行,在
导入GoogleAppClient.discovery
文件“C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\site packages\googleapiclient\discovery.py”,第32行,在
从six.moves导入http_客户端
文件“C:\Users\Bram\AppData\Local\Programs\Python36-32\lib\site packages\six.py”,第92行,在__
结果=自我解决()
文件“C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\site packages\six.py”,第115行,在
返回导入模块(self.mod)
文件“C:\Users\Bram\AppData\Local\Programs\Python36-32\lib\site packages\six.py”,第82行,在导入模块中
__导入(名称)
文件“C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\http\client.py”,第71行,在
导入email.parser
文件“C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\parser.py”,第12行,在
从email.feedparser导入feedparser,BytesFeedParser
文件“C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\feedparser.py”,第27行,在
来自电子邮件。\u policybase import compat32
文件“C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\\u policybase.py”,第9行,在
从email.utils导入\u具有\u代理项
文件“C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\utils.py”,第33行,在
从电子邮件。\u parseaddr导入报价
文件“C:\Users\Bram\AppData\Local\Programs\Python\Python36-32\lib\email\\u parseaddr.py”,第16行,在
导入时间、日历
文件“c:\Users\Bram\Documents\My Project\src\calendar.py”,第5行,在
从GoogleAppClient.discovery导入生成
ImportError:无法导入名称“build”
我已尝试使用
pip
强制重新安装模块。我已经在类似的线程上安装了人们建议的任何程序包,在这些线程中人们对这个程序包有问题,(谈论
apiclient
httplib2
oauth2client
uritemplate
),我对这个回溯感到非常困惑,因为它似乎引用了我代码中的两行不同的代码


我做错了什么?

您导致了循环导入。您的文件名为
calendar.py
,它隐藏了同名的标准库模块。正如您在回溯中所看到的,
\u parseaddr.py
导入了
日历
,希望找到stdlib模块,但找到了您的模块,现在已进入一个循环


将您的文件重命名为其他文件。

我现在遇到了一个不同的错误(http\U客户端没有未经授权的属性)-但是这个问题已经解决了!我真的被这件事缠住了。谢谢如果在重新运行脚本时收到“ImportError:bad magic number”,则还需要删除与脚本关联的.pyc文件(在本例中为
rm calendar.pyc
)。这不会造成任何伤害,因为当您重新运行新的.py文件时,pyc文件将自动重新生成。