首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python迭代,sys.path

Python迭代,sys.path
EN

Stack Overflow用户
提问于 2018-02-23 10:29:25
回答 1查看 291关注 0票数 2

所以我想知道,此时我正在读一本关于Python的书。这本书解释如下:

导入算法 要真正理解命名空间包,我们必须在幕后查看import操作在3.3中是如何工作的。在导入过程中,Python仍然遍历模块搜索路径sys.path中的每个目录,就像在3.2和更早版本中那样。

我的问题是:在未导入sys时,python如何能够遍历sys.path。另外,如果python能够在没有导入的情况下看到sys来迭代sys.path,那么为什么我们需要在代码中导入sys呢?

代码语言:javascript
复制
>>> sys
NameError: name 'sys' is not defined.

>>> import sys
>>> sys
<module 'sys' (built-in)>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-23 11:28:13

没有矛盾。Python的sys模块将修改import行为的搜索路径配置公开给Python端,但是即使没有在Python代码中导入sys,解释器也知道自己的配置。

在下面的CPython源代码中,注释如下:

代码语言:javascript
复制
/* _PyMem_SetDefaultAllocator() is needed to get a known memory allocator,
   since Py_SetPath(), Py_SetPythonHome() and Py_SetProgramName() can be
   called before Py_Initialize() which can changes the memory allocator. */

这意味着,负责设置模块搜索路径的Py_SetPath()可以在解释任何Python代码(例如,import语句)之前尽早执行,在解释器自己的内存分配器接管之前,它需要自己的内存分配器。

在运行Python解释器的main()函数时,它已经可以读了使用Py_GetPath()进行路径配置,在必要时调用内部函数_PyPathConfig_Init(),在解释器准备好执行Py_GetPath()代码之前就可以安全地执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48945739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档