安装Python模块getotp时报NameError:execfile未定义错误如何解决
报错原因
核心错误为NameError: name 'execfile' is not defined,根因如下:
execfile是Python2专属的内置函数,Python3全版本已移除该函数- 当前环境使用Python3.9版本,而getotp已发布的所有0.0.1/0.0.2/0.0.3版本,其
setup.py均使用Python2专属语法编写,未做Python3适配,因此所有版本安装均会失败
解决方案
可根据自身场景选择对应方案:
- 方案1:切换Python2环境安装
如果业务场景兼容Python2,切换到Python2.7环境下执行pip install getotp即可正常完成安装 - 方案2:手动适配Python3本地安装
必须使用Python3时,可修改源码后手动安装:
- 下载getotp对应版本的源码压缩包,解压到本地目录
- 打开解压目录中的
setup.py,将第6行execfile('getotp/version.py')替换为如下Python3兼容代码:
with open('getotp/version.py', 'r', encoding='utf-8') as f: exec(f.read())
- 在解压目录下打开PowerShell,执行
pip install .即可完成本地安装
- 方案3:替换为维护更活跃的同功能模块
该模块已停止维护多年,建议直接使用兼容Python3的成熟OTP模块pyotp,执行pip install pyotp即可完成安装,功能完全覆盖getotp的能力。
内容的提问来源于stack exchange,提问作者Harsh
相关产品推荐
相关产品推荐

