导入模块时,python解释器如何知道在何处查找sys模块?
我试图理解python解释器是如何导入模块的。导入模块时,解释器会搜索sys.path中的路径。我不明白解释器是如何固有地导入sys模块的,它在哪里找到sys模块的?如果解释器固有sys模块,为什么我们必须导入sys模块以使用该模块的函数和变量导入模块时,python解释器如何知道在何处查找sys模块?,python,Python,我试图理解python解释器是如何导入模块的。导入模块时,解释器会搜索sys.path中的路径。我不明白解释器是如何固有地导入sys模块的,它在哪里找到sys模块的?如果解释器固有sys模块,为什么我们必须导入sys模块以使用该模块的函数和变量 import math 例如,当我们导入math包时,会在sys.path目录中检查它,但它如何知道sys.path实际在哪里? 感谢您的帮助sys模块是一种访问python内部构件的方法,如对象大小、模块加载路径 系统路径 指定模块搜索路径的字符串列
import math
例如,当我们导入math包时,会在sys.path目录中检查它,但它如何知道sys.path实际在哪里?
感谢您的帮助
sys
模块是一种访问python内部构件的方法,如对象大小、模块加载路径
系统路径
指定模块搜索路径的字符串列表。从环境变量PYTHONPATH初始化,加上依赖于安装的默认值
启动时,python读取PYTHONPATH
env。变量,添加其他一些内置路径,并运行模块。当您使用导入时,它只在内部路径列表中查找模块
当您导入sys
并更改path
时,它会反映在python内部路径中。但它只是一个API。如果他们创建了一个add_path
(和remove_path
,get_path
…)方法,则会使事情变得不那么神奇,但也不那么自然
即使您不使用底层机制,它也是活动的
sys.path
是python级别的API,因此每个人都知道如何更改配置,但是python不需要使用sys
包来操作。sys
模块是访问python内部的一种方式,比如对象大小、模块加载路径
系统路径
指定模块搜索路径的字符串列表。从环境变量PYTHONPATH初始化,加上依赖于安装的默认值
启动时,python读取PYTHONPATH
env。变量,添加其他一些内置路径,并运行模块。当您使用导入时,它只在内部路径列表中查找模块
当您导入sys
并更改path
时,它会反映在python内部路径中。但它只是一个API。如果他们创建了一个add_path
(和remove_path
,get_path
…)方法,则会使事情变得不那么神奇,但也不那么自然
即使您不使用底层机制,它也是活动的
sys.path
是python级别的API,因此每个人都知道如何更改配置,但是python不需要sys
包来运行。正如另一个答案所说,有一组默认路径:
环境变量PYTHONPATH
- Unix上的
,其中$prefix/lib/pythonX.Y
基本上是“二进制文件所在的位置”-因此默认情况下它是$prefix
,但也可以是/usr/lib/pythonX.Y
。还有virtualenv/lib/pythonX.Y
,但这通常与$execprefix
相同$prefix
sys
就是其中之一。当您编写import sys
时,Python将首先查看内置列表,如果找到它,它将不会打开任何文件,只需执行导入即可
当您导入其他非内置模块时,python将在内部查看sys.path
以找到它们。例如,python首先要做的事情之一是导入站点,它可以在sys.path上找到该站点。这个文件有添加其他导入位置的说明:站点包
目录,您的主目录路径,可能还有一些其他位置
是的,sys
模块是解释器中“固有”的模块之一
那你为什么要进口呢
基本上是因为它是一个模块,您必须始终导入一个模块才能使用它。在某种程度上,这只是一种形式——不导入它可以节省一些内存(表示“sys
的内存存在于您的程序中”,即使实际加载了sys模块的代码),但这并不重要
但是python开发团队决定永远不会自动导入模块,因此当您想要使用它时,必须明确地请求它。这也意味着,默认情况下,“sys”一词可以自由使用,例如,作为变量或函数名使用,最好让程序员尽可能多地自由使用名称。正如另一个答案所说,有一系列默认路径:
环境变量PYTHONPATH
- Unix上的
,其中$prefix/lib/pythonX.Y
基本上是“二进制文件所在的位置”-因此默认情况下它是$prefix
,但也可以是/usr/lib/pythonX.Y
。还有virtualenv/lib/pythonX.Y
,但这通常与$execprefix
相同$prefix
sys
就是其中之一。当您编写import sys
时,Python将首先查看内置列表,如果找到它,它将不会打开任何文件,只需执行导入即可
当您导入其他非内置模块时,python将在内部查看sys.path
以找到它们。例如,python首先要做的事情之一是导入站点,它可以在sys.path上找到该站点。这个文件有添加其他导入位置的说明:站点包
目录,您的主目录路径,可能还有一些其他位置
是的,sys
模块就是其中之一