第十九章:模块和包-pkgutil:包工具-包的开发版本

it2022-06-28  127

19.2.2 包的开发版本 改进一个项目是,开发人员通常需要测试对已安装包的修改。将已安装的版本替换为开发版本可能是个糟糕的想法,因为开发版本不一定正确,而且系统上的其他工具可能会依赖于已安装的包。 可以使用virtualenv或venv在开发环境中配置包的一个完全独立的副本,不过对于小的修改,建立这样一个包含所有依赖包的虚拟环境开销可能太大。 还有另一种选择,对于正在开发的包,可以使用pkgutil修改其中模块的搜索路径。不过,在这种情况下,路径必须逆向设置,以使开发版本会覆盖已安装的版本。给定一个包demopkg2,其中包含一个__init__.py和overloaded.py,正则开发的函数位于demopkg2/overloaded.py,已安装的版本包含:

def func(): print('This is the installed version of func().')

另外,demopkg2/init.py包含:

import pkgutil __path__ = pkgutil.extend_path(__path__,__name__) __path__.reverse()

reverse()用来确保扫描默认位置之前先扫描由pkgutil增加搜索路径的目录,以完成导入。

下一个程序会导入demopkg2.overloaded并调用func()。

import demopkg2 print('demopkg2 :',demopkg2.__file__) import demopkg2.overloaded print('demopkg2.overloaded:',demopkg2.overloaded.__file__) print() demopkg2.overloaded.func()

如果运行时没有做任何特殊的路径处理,则会从func()的已安装版本生成输出。 开发目录包含以下内容:


最新回复(0)