我正在学习Python模块,据我理解,当我们在代码中尝试import
一个模块时,Python会查找该模块是否存在于sys.path
中,如果不存在,则会引发ModuleNotFoundError
。
向sys.path
添加位置
假设我想从一个默认不存在于sys.path
中的位置进行导入,我可以简单地将这个新位置附加到sys.path
中,如下面的片段所示,一切都可以正常工作。
~/Documents/python-modules/usemymodule.py
import sys
sys.path.append("/home/som/Documents/modules")
import mymodule
mymodule.yell("Hello World")
~/Documents/python-modules/modules/mymodule.py
def yell(txt):
print(f"{txt.upper()}")
清空 sys.path
我的疑惑是,当我清空整个 sys.path
列表时,我不应该能够导入任何模块,但令我惊讶的是我仍然可以导入内置模块。下面的代码可以正常工作。
import sys
sys.path.clear()
import math
math.ceil(10.2)
我认为可能 Python 内部并不使用
sys.path
,sys.path
只是 Python 使用的原始列表的一个浅拷贝,但是当添加到 sys.path
时它是如何工作的,为什么在清空后只能导入内置模块而不能导入自定义模块呢?我真的陷入困境了,任何帮助都将不胜感激。此外,有一个类似的问题,但它没有解答我的疑问。
/usr/lib/python$PYTHON_VERSION
,并在sys.path
为空时使用它作为后备。 - TheEaglesys.path
中清除某些条目而不是完全清除它,解释器是否会查看sys.path
? - anonsys.path
中,当它永远不会用于内置模块时呢? - anon