__path__'来自哪里

3 投票
2 回答
7581 浏览
提问于 2025-04-15 17:38

我找不到是谁定义了 '__path__',为什么 '__path__' 可以使用。

import os
import sys
import warnings 
import ConfigParser # ConfigParser is not a virtualenv module, so we can use it to find the stdlib

dirname = os.path.dirname

distutils_path = os.path.join(os.path.dirname(ConfigParser.__file__), 'distutils')
if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)):
    warnings.warn(
        "The virtualenv distutils package at %s appears to be in the same location as the system distutils?")
else:
    __path__.insert(0, distutils_path)#who defined me.???
    exec open(os.path.join(distutils_path, '__init__.py')).read()

2 个回答

3

我找到了一段关于 __path__ 变量的描述:

这个变量最开始是一个包含一个项目的列表,这个项目是包的目录名(也就是在 sys.path 目录下的一个子目录)。如果你改变 __path__ 的内容,就会改变搜索包的子模块时所用的目录列表。

这里有个链接: http://www.python.org/doc/essays/packages.html

那一页讨论的是 Python 1.5 中的“内置包支持”,不过现在可能仍然适用。

我不能告诉你更多,因为我不使用 Python。我是通过谷歌搜索找到这个链接的。

编辑:是的!我本来想提醒你我们昨天讨论过的内容 yesterday,但一个好的开始是阅读 steveha 的中文 Python 文档。

8

你真的需要看看一些Python的文档,学习一下这门语言的基础知识。

我查了一下,你似乎会说中文。这里有一些中文的Python文档资源:

http://www6.uniovi.es/python/doc/NonEnglish.html#chinese

现在,关于你的问题。我不太确定答案是什么,所以我用了谷歌搜索。我搜索了“Python __path__”,很快找到了:

http://docs.python.org/tutorial/modules.html

6.4.3. 多目录中的包

包支持一个特别的属性,叫做__path__。这个属性最开始是一个列表,里面包含了存放包的__init__.py文件的目录名,直到这个文件里的代码被执行。这

个变量是可以修改的;修改后会影响将来在这个包中查找模块和子包的方式。

虽然这个功能不常用,但它可以用来扩展在一个包中找到的模块集合。

撰写回答