python – imp.find_module(),支持压缩蛋
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – imp.find_module(),支持压缩蛋,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2100字,纯文字阅读大概需要4分钟。
内容图文
![python – imp.find_module(),支持压缩蛋](/upload/InfoBanner/zyjiaocheng/809/c4adf3c847454d4891df5a81e9306ba3.jpg)
imp.find_module()没有找到拉链蛋的模块.
如何找到可以来自这两个地方的模块:目录或压缩蛋?在我的情况下,重要的是我可以像imp.find_module()一样提供路径参数.
背景
以某种方式在我们的环境中安装两次包.作为拉链蛋和普通文件.我想写一个检查,告诉我模块是否安装了两次.见https://stackoverflow.com/a/23990989/633961
解决方法:
假设Python 2,我认为你需要的信息是在PEP 302 – New Import Hooks(PEP已经过时了,Python 3在这方面完全不同).
从ZIP档案中查找和导入模块在zipimport中实施,如PEP所描述的那样“挂钩”到导入机器中.当将PEP 302和从ZIP导入添加到Python时,imp模块未被调整,即imp完全不知道PEP 302挂钩.
找到像imp这样的模块并且尊重PEP 302钩子的“通用”find_module函数大致如下所示:
import imp
import sys
def find_module(fullname, path=None):
try:
# 1. Try imp.find_module(), which searches sys.path, but does
# not respect PEP 302 import hooks.
result = imp.find_module(fullname, path)
if result:
return result
except ImportError:
pass
if path is None:
path = sys.path
for item in path:
# 2. Scan path for import hooks. sys.path_importer_cache maps
# path items to optional "importer" objects, that implement
# find_module() etc. Note that path must be a subset of
# sys.path for this to work.
importer = sys.path_importer_cache.get(item)
if importer:
try:
result = importer.find_module(fullname, [item])
if result:
return result
except ImportError:
pass
raise ImportError("%s not found" % fullname)
if __name__ == "__main__":
# Provide a simple CLI for `find_module` above.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--path", action="append")
parser.add_argument("modname", nargs='+')
args = parser.parse_args()
for name in args.modname:
print find_module(name, args.path)
但请注意,在ZIP存档中查找模块的结果与imp.find_module返回的结果完全不同:您将获得特定ZIP的zipimport.zipimporter对象.当被要求从压缩蛋中找到常规模块,内置模块和模块时,上面的litte程序会打印以下内容:
$python find_module.py grin os sys
<zipimporter object "<my venv>/lib/python2.7/site-packages/grin-1.2.1-py2.7.egg">
(<open file '<my venv>/lib/python2.7/os.py', mode 'U' at 0x10a0bbf60>, '<my venv>/lib/python2.7/os.py', ('.py', 'U', 1))
(None, 'sys', ('', '', 6))
内容总结
以上是互联网集市为您收集整理的python – imp.find_module(),支持压缩蛋全部内容,希望文章能够帮你解决python – imp.find_module(),支持压缩蛋所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。