脚本名称与导入的模块名称相同

Script name same as imported module name

如果您有这样的脚本:

import requests
requests.get()

并将其命名为 requests.py 您将收到一个属性错误,指出 requests 没有属性 get 因为 Python 指的是脚本名称请求并且名称没有属性 get.

但是,如果我有这个脚本:

import time
time.sleep()

我命名为time.py,不会出错。在 Python 2.7.11 和 Python 3.5.3.

上都试过了

为什么同样的规则在这里不适用?

因为time是内置的,request是站点包:

尝试打印 __file__ 属性以查看模块所在的位置:

print(time.__file__)
AttributeError: 'module' object has no attribute '__file__'

你得到了一个错误,但是 requests 你得到了答案

print(requests.__file__)
C:\Python34\lib\site-packages\requests\__init__.py

help(time.__loader__)给出了另一个提示:

>>> help(time.__loader__)
Help on class BuiltinImporter in module importlib._bootstrap:

class BuiltinImporter(builtins.object)
 |  Meta path import for built-in modules.

请求:

>>> help(requests.__loader__)
Help on SourceFileLoader in module importlib._bootstrap object:

class SourceFileLoader(FileLoader, SourceLoader)
 |  Concrete implementation of SourceLoader using the file system.

无论如何,不要将您的模块作为内置模块或库包调用。在这两种情况下你都会遇到问题。

  • 以内置命名:如您所见,您不能导入它
  • 以网站包命名:您无法将网站导入 package/use 在您的模块中