第十九章:模块和包-pkgutil:包工具-包导入路径

19.2.1 包导入路径
extend_path()函数可以用来修改搜索路径,并改变从包导入子模块的方式,这样能结合多个不同的目录,使它们就好像是一个目录一样。借助这个函数,可以用包的开发版本覆盖已安装的版本,或者将平台特定的模块与共享模块结合到一个包命名空间。
exted_path()会扫描sys.path来查找目录,其中包括一个子目录,它的的名字基于第二个参数指定的包。这个目录列表与作为第一个参数传入并作为一个列表返回的路径值结合,很适合作为包导入路径。
名为demopkg的示例包中包括两个文件,init.py和shared.py。demopkg1中的__init__.py文件包含print语句,以显示修改前和修改后的搜索路径,强调这两个路径之间的区别。

import pkgutil
import pprint

print('demopkg1.__path__ before:')
pprint.pprint(__path__)
print()

__path__ = pkgutil.extend_path(__path__,__name__)

print('demopkg1.__path__ after:')
pprint.pprint(__path__)
print()

extension目录(包含对应demopkg的特性)还包含另外3个源文件。每个目录层次上都有__init__.py,另外这里还有一个not_shared.py。
在这里插入图片描述
下面这个简单的测试程序会导入demopkg1包。

import demopkg1
print('demopkg1              :',demppkg1.__file__)

try:
    import demopkg1.shared
except Exception as err:
    print('demopkg1.shared     : Not found ({})'.format(err))
else:
    print('demopkg1.shared     :',demopkg1.shared.__file__)


try:
    import demopkg1.not_shared
except Exception as err:
    print('demopkg1.not_shared: Not found ({})'.format(err))
else:
    print('demopkg1.not_shared:',demopkg1.not_shared.__file__)

直接从命令行运行这个测试程序时,找不到not_shared模块。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值