Python导入迭代,sys.path

时间:2018-02-23 10:29:25

标签: python python-3.x import sys

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

  

导入算法

     

要真正了解命名空间包,我们有   深入了解import操作在3.3中是如何工作的。   在导入期间,Python仍然遍历每个目录   模块搜索路径sys.path,与3.2及更早版本一样。

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

>>> sys
NameError: name 'sys' is not defined.

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

1 个答案:

答案 0 :(得分:1)

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

在以下CPython source code中,评论为

/* _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()函数运行时,it can already read使用Py_GetPath()的路径配置,如果需要调用内部函数_PyPathConfig_Init(),这是安全的在解释器准备好执行Python代码之前。