将Python安装信息写入Windows注册表的脚本示例
本文提供将Python安装信息写入Windows注册表的Python脚本示例。针对重装系统后仅配置环境变量但缺少注册表信息导致交互失败的问题,通过修改注册表项HKEY_CURRENT_USER下的SOFTWARE\Python\Pythoncore路径,自动写入InstallPath和PythonPath键值。代码兼容Python 2.x与3.5.2版本,用于解决第三方库(如pywin32)因注册表缺失导致的安装或运行问题。
Python注册表配置背景
背景
在重装操作系统后,有时会发现原本安装在E盘的Python环境依然可以直接使用,这通常是因为仅将Python的安装目录添加到了系统环境变量中。此前并未深究其原理,但在尝试与天软系统进行交互时遭遇持续失败,推测原因可能是系统注册表中缺失了必要的Python注册信息。
以下代码源自网络,可直接复制运行,此处留存以供后续参考。
Python 3.5.2注册脚本
代码
Python 3.5.2版本实现
import sys
from winreg import *
# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix
regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
installpath, installpath, installpath
)
def RegisterPy():
try:
reg = OpenKey(HKEY_CURRENT_USER, regpath)
except EnvironmentError as e:
try:
reg = CreateKey(HKEY_CURRENT_USER, regpath)
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
except:
print("*** Unable to register!")
return
print("--- Python", version, "is now registered!")
return
if (QueryValue(reg, installkey) == installpath and
QueryValue(reg, pythonkey) == pythonpath):
CloseKey(reg)
print("=== Python", version, "is already registered!")
return
CloseKey(reg)
print("*** Unable to register!")
print("*** You probably have another Python installation!")
if __name__ == "__main__":
RegisterPy()
Python 2.x注册脚本
Python 2.*版本实现
'''
解决注册问题,pywin32安装存在问题
'''
import sys
from _winreg import *
# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix
regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
installpath, installpath, installpath
)
def RegisterPy():
try:
reg = OpenKey(HKEY_CURRENT_USER, regpath)
except EnvironmentError as e:
try:
reg = CreateKey(HKEY_CURRENT_USER, regpath)
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
except:
print "*** Unable to register!"
return
print "--- Python", version, "is now registered!"
return
if (QueryValue(reg, installkey) == installpath and
QueryValue(reg, pythonkey) == pythonpath):
CloseKey(reg)
print "=== Python", version, "is already registered!"
return
CloseKey(reg)
print "*** Unable to register!"
print "*** You probably have another Python installation!"
if __name__ == "__main__":
RegisterPy()
以上关于将Python安装信息加入注册表的示例内容分享完毕,希望能为遇到类似问题的读者提供参考,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









