- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在今天之前,我从未注意到在我的一些包上定义的 __path__
属性。根据文档:
Packages support one more special attribute,
__path__
. This is initialized to be a list containing the name of the directory holding the package’s__init__.py
before the code in that file is executed. This variable can be modified; doing so affects future searches for modules and subpackages contained in the package.While this feature is not often needed, it can be used to extend the set of modules found in a package.
有人可以向我解释这到底是什么意思,以及我为什么要使用它吗?
最佳答案
这通常与 pkgutil 一起使用让一个包在磁盘上布局。例如,zope.interface 和 zope.schema 是独立的发行版(zope
是一个“命名空间包”)。您可能在 /usr/lib/python2.6/site-packages/zope/interface/
中安装了 zope.interface,而在 /home/me 中更多地使用 zope.schema/src/myproject/lib/python2.6/site-packages/zope/schema
.
如果你把 pkgutil.extend_path(__path__, __name__)
放在 /usr/lib/python2.6/site-packages/zope/__init__.py
那么两个zope .interface 和 zope.schema 将是可导入的,因为 pkgutil 会将 __path__
更改为 ['/usr/lib/python2.6/site-packages/zope', '/home/me/src/myproject/lib/python2.6/site-packages/zope']
.
pkg_resources.declare_namespace
(Setuptools 的一部分)类似于 pkgutil.extend_path
,但更了解路径上的 zip。
手动更改 __path__
并不常见,也可能没有必要,但在调试命名空间包的导入问题时查看变量很有用。
您也可以使用 __path__
进行猴子补丁,例如,我有时会通过在 sys 早期创建文件
:distutils/__init__.py
来对 distutils 进行猴子补丁.path
import os
stdlib_dir = os.path.dirname(os.__file__)
real_distutils_path = os.path.join(stdlib_dir, 'distutils')
__path__.append(real_distutils_path)
execfile(os.path.join(real_distutils_path, '__init__.py'))
# and then apply some monkeypatching here...
关于python - __path__ 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699287/
我找不到谁定义了'__path__',为什么可以使用'__path__'。 import os import sys import warnings import ConfigParser # Con
在今天之前,我从未注意到在我的一些包上定义的 __path__ 属性。根据文档: Packages support one more special attribute, __path__. This
为什么 __path__ 是一个列表? >>> my.module.__path__ ['/path/to/my/module'] 最佳答案 简短的版本是因为一个包可以驻留在多个目录中。 稍长的版本是
当我在 Python 中创建一个常规包时,我得到一个带有 __path__ 方法的对象,根据 Python 文档,它被认为是一种特殊类型的模块。我的问题是为什么在 pack.__path__ list
我有一个很长的脚本,最后需要对巨大列表的所有项目运行一个函数,这需要很长时间,例如: input_a= [1,2,3,4] # a lengthy computation on some data p
我遇到了一个问题,我不知道如何进一步调试。 我有一个具有不同目的的项目,其中使用了 Python 3。 我创建了一个名为 的 Python 包包 . 包的顶级目录位于 我的项目/python/ . 在
我正在尝试以编程方式导入子模块。我的文件树如下所示: oopsd/__init__.py oopsd/oopsd.py oopsd/driver/__init__.py oopsd/driver/op
早上好, 我正在使用 Jupyter 笔记本和 Python 3.4。以下错误引用了 Anaconda 发行包。这个错误发生得相当突然(仅在我能够导入模块之前 2 分钟)。我使用的是 Windows
我最近使用 pip install 安装了 opencv 包,并编写了一个小代码来测试它(cvtest.py)。该代码通过 python idle shell 运行,但在命令提示符下运行它会给出错误
我的代码在 PyCharm 中运行完美,但我在尝试在终端中打开它时收到错误消息。我的代码有什么问题,或者我哪里出错了? import urllib.request with urllib.reques
我正在研究有关 Angular5 的入门套件,但在使用以下命令创建新组件时遇到了麻烦:“npm run nggenerate component component/exemple/user/user
我在 fibo.py 中有一个模块具有以下功能的文件 - #fibonacci numbers module def fib(n): # write Fibonacci series up to
我是一名优秀的程序员,十分优秀!