【发布时间】:2021-03-27 20:03:20
【问题描述】:
更新:
案例 1:
同一文件夹中的文件:
main.py
string.py
main.py中的代码:
import string
string.py中的代码:
print('Hello!')
运行 main.py 输出是:Hello!
案例 2:
同一文件夹中的文件:
main.py
math.py
main.py中的代码:
import math
math.py 中的代码:
print('Hello!')
运行 main.py 输出什么都没有...
老问题:
如果我将我的脚本命名为“string.py”并将其导入另一个脚本,它会与内置的“string”模块重叠
如果我将我的脚本命名为“math.py”并将其导入另一个脚本,则内置的“数学”会与我自己的重叠
使用内置模块等名称的脚本导入行为取决于我如何命名它们。
一些受影响的模块名称:hashlib、字符串、日历
不影响的模块名称:math、cmath、os
Python 要做的第一件事是在 sys.modules 中查找名称 abc。 这是之前导入的所有模块的缓存。如果 在模块缓存中找不到该名称,Python 将继续 搜索内置模块列表。这些是来的模块 预装 Python,可在 Python 标准中找到 图书馆。如果在内置模块中仍未找到该名称,则 Python 然后在 sys.path 定义的目录列表中搜索它。
来自 Michael Lutz 的“Learning Python”:
大致来说,Python 的模块搜索路径是由串联组成的 在这些主要组件中,有些是为您预设的,有些是为您预先设置的 你可以定制其中的一个来告诉 Python 去哪里看:
程序的主目录
PYTHONPATH 目录(如果已设置)
标准库目录
任何 .pth 文件的内容(如果存在)
第三方扩展的站点包主页
那么现在哪一个是正确的?
【问题讨论】:
-
您能否提供重现您所询问行为的示例代码?无论模块的名称如何,您都应该看到相同的行为,这表明这里还有更多的东西在起作用。
-
@larsks 感谢您的回答。我更新了问题。现在应该清楚了
-
@larsks 感谢您的回答。我更新了问题。现在应该清楚了
标签: python python-3.x python-import built-in