关于Python中backported module(反向移植模块)的定义及判断是否使用argparse反向移植版本的咨询
关于Python中backported module(反向移植模块)的定义及判断是否使用argparse反向移植版本的咨询
我来帮你理清这两个问题哈~
一、什么是反向移植(backported)模块?
简单来说,反向移植就是把原本只在Python高版本中存在的模块或功能,经过开发者修改适配后,让它能在更早的低版本Python环境中运行。
拿你遇到的argparse举例子:它本身是从Python 2.7和3.2开始才正式加入官方标准库的,但有开发者把它的代码做了调整,做成了可以在Python 2.6、3.0/3.1这些更早版本上运行的包——这个修改后的包就是backported版本。
它和模块原生的「支持版本范围」不是一回事:模块原生的支持范围是官方定义的、能直接运行它的Python版本;而backported是第三方主动把高版本的功能“搬”到低版本,让低版本也能用上原本用不了的功能。
二、怎么判断自己是否在用backported的argparse?
结合你给出的信息,可以从这几个方面判断:
- 看pip安装记录:从你运行
pip3 show argparse的结果能看到,你确实安装了一个第三方的argparse包(版本1.4.0,位置在/home/joeuser/.local/lib/python3.6/site-packages)。而Python 3.6本身的标准库已经自带argparse了,所以你的环境里现在同时存在两个argparse:一个是官方标准库的,一个是第三方的backported版本。 - 验证实际使用的是哪一个:打开Python终端,运行以下代码就能确认你脚本里实际调用的是哪个版本:
如果输出的路径是系统Python标准库的路径(比如类似import argparse print(argparse.__file__)/usr/lib/python3.6/argparse.py),那你用的是原生标准库的argparse;如果输出的是/home/joeuser/.local/lib/python3.6/site-packages/argparse/...这类路径,那你用的就是backported版本。 - 理解vermin提示的意义:vermin之所以提示这个,是因为如果你的脚本需要在Python 2.7/3.2之前的版本运行,就必须依赖这个backported的
argparse;但如果你的脚本只需要在2.7/3.2及以上版本运行,其实完全可以用标准库自带的argparse,不需要这个第三方包。
备注:内容来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

