Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导入模块时,python解释器如何知道在何处查找sys模块?_Python - Fatal编程技术网

导入模块时,python解释器如何知道在何处查找sys模块?

导入模块时,python解释器如何知道在何处查找sys模块?,python,Python,我试图理解python解释器是如何导入模块的。导入模块时,解释器会搜索sys.path中的路径。我不明白解释器是如何固有地导入sys模块的,它在哪里找到sys模块的?如果解释器固有sys模块,为什么我们必须导入sys模块以使用该模块的函数和变量 import math 例如,当我们导入math包时,会在sys.path目录中检查它,但它如何知道sys.path实际在哪里? 感谢您的帮助sys模块是一种访问python内部构件的方法,如对象大小、模块加载路径 系统路径 指定模块搜索路径的字符串列

我试图理解python解释器是如何导入模块的。导入模块时,解释器会搜索sys.path中的路径。我不明白解释器是如何固有地导入sys模块的,它在哪里找到sys模块的?如果解释器固有sys模块,为什么我们必须导入sys模块以使用该模块的函数和变量

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
模块就是其中之一