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

时间:2016-12-22 14:48:37

标签: python module pythonpath

如果您有以下脚本:

import requests
requests.get()

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

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

import time
time.sleep()

我将其命名为time.py,不会有任何错误。在Python 2.7.11和Python 3.5.3上都试过。

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

1 个答案:

答案 0 :(得分:2)

因为time是内置的,而请求是网站包:

尝试打印__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.

无论如何,将您的模块称为内置函数或库包。在这两种情况下,你都会遇到问题。

  • 在内置后命名:您无法导入它,如您所见
  • 在网站包之后命名:您无法导入网站包/在模块中使用它