Pythonimport导⼊的路径顺序
写在前⾯:
Python内置模块就是标准库(模块)吗?或者说Python的⾃带string模块是内置模块吗?
答案是:
string不是内置模块,但它是标准库。也就是说Python内置模块和标准库并不是同⼀种东西。
什么是内置模块?在Python官⽅的⽂档这⾥有说到:
Python’s standard library is very extensive, offering a wide range of facilities as indicated by the long table of
contents listed below. The library contains built-in modules (written in C) that provide access to system functionality such as file I/O that would otherwise be inaccessible to Python programmers, as well as modules written in Python that provide standardized solutions for many problems that occur in everyday programming.
它说明到内置模块是⽤C写的,提供了对系统功能的访问。从Python的标准库路径下⾯是不到 sys 这个库的,原因就是它是操作系统相关,⽤C语⾔编写的。可以看到 string.py 模块,它是⽤Python写的。
虽然前⾯说明了内置模块不是标准库,但是内置模块可以划分到标准库⼀类中去,这⾥需要注意的是划分归类,⽽不是本质相同。这⾥说明内置模块不是标准库似乎有点吹⽑求疵的意思,好像区不区分它们没有什么意义?是的,⼤多数情况下,对它们之间没有做区分的必要。但是在理解Python的模块查顺序时,这却是⼀个⾄关重要的差异。
为了说明这个差异,先说明⼀下import的搜索路径顺序:
在.py脚本⽂件中import导⼊时,寻模块有两个步骤:
1、搜索「内置模块」(built-in module)
python默认安装路径2、搜索 sys.path 中的路径
⽽ sys.path 在python脚本执⾏时动态⽣成,⼜会按照顺序添加以下路径:
(1)当前执⾏脚本⽂件所在⽬录;
(2)环境变量 PYTHONPATH中列出的⽬录(即标准库、三⽅库位置);
>>> import sys
>>> sys.path
['', 'D:\\Anaconda3\\python37.zip', 'D:\\Anaconda3\\DLLs', 'D:\\Anaconda3\\lib', 'D:\\Anaconda3',
'D:\\Anaconda3\\lib\\site-packages', 'D:\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Anaconda3\\lib\\site-
packages\\win32\\lib', 'D:\\Anaconda3\\lib\\site-packages\\Pythonwin']
(3)安装依赖的⼀些缺省值(通常是三⽅库位置,类似于D:\\Python\\Lib\\site-packages)。
写在后⾯:
那么内置模块⼀定是C语⾔写的吗?
答案是:
不是。因为对于os.py来说,它也是内置模块,⼀些⽂件I/O模块也是内置模块,它们不可能都⽤C语⾔写成,因为Python还需要通过它们来为Python程序提供⽀持,对于os.py是不是内置模块持有怀疑的读者,可以⾃⾏使⽤上⾯的同名模块覆盖特性进⾏测试。
扩展阅读:
Python import(导⼊)最详解的讲解
内建模板__builtin__,标准模块
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论