python3.6无法安装PYWIN32的问题,解决方法

2023-07-08 10:59:45 浏览数 (4)

1

pip install

代码语言:javascript复制
python -m pip install pypiwin32
代码语言:javascript复制
pip install win32com
代码语言:javascript复制
python -m pip install pypiwin32

2

 原因是PYTHON3.6未在HKEY_CURRENT_USERSOFTWAREPythonPythonCore写入3.6的信息

解决方法一:把下面的文本中路径改成自己的py3.6的,另存为.reg,然后导入

代码语言:javascript复制
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() 
代码语言:javascript复制
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSOFTWAREPython]
[HKEY_CURRENT_USERSOFTWAREPythonPythonCore]
[HKEY_CURRENT_USERSOFTWAREPythonPythonCore3.6]
[HKEY_CURRENT_USERSOFTWAREPythonPythonCore3.6Help]
@=""
[HKEY_CURRENT_USERSOFTWAREPythonPythonCore3.6HelpPythonwin Reference]
@="C:\Python\Python36\Lib\site-packages\PyWin32.chm"
[HKEY_CURRENT_USERSOFTWAREPythonPythonCore3.6InstallPath]
@="C:\Python\Python36"
[HKEY_CURRENT_USERSOFTWAREPythonPythonCore3.6PythonPath]
@="C:\Python\Python36;C:\Python\Python36\Lib\;C:\Python\Python36\DLLs\"

解决方法二:用下面PY脚本,3.X版本都可以通用,自动会添加当前版本的信息

222

代码语言:javascript复制
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() 

333

pycharm或者vscode或者win32版本

报错信息提示 win32com 模块没有 client 属性,于是我做了如下尝试,因为之前遇到过类似的情况,我首先考虑的是版本问题,卸载、重装,反反复复。

降低版本尝试

代码语言:javascript复制
pip install pywin32==227
pip install pywin32==226
pip install pywin32==225
pip install pywin32==224
pip install pywin32==223
pip install pywin32==222
...

逐个降版本,依然不可行。

版本降到 222 时,提示缺少 Dll 文件,那是不是相关 C  的依赖需要更新完善呢,我检查电脑上的 Microsoft Visual C  相关依赖,貌似是不够全,于是我安装了相关的依赖。

完善 C 相关依赖

完善前我的电脑只要 2015 版本的依赖,如下图: [图片上传失败...(image-c87c14-1597809584716)] 借用完善工具 MSVBCRT_AIO_2018.05.13_X86 X64.exe,一次性完善相关依赖,傻瓜式操作,直接下一步即可,完善后结果如下:

image

这下全拉,再次运行,果然不出所料,仍然报同样的错误,下面先试试离线包方式安装。

离线包方式安装

前面尝试在命令行中安装的方式,并没有解决报错问题,现在试试离线包的方式:

1、先从 pypi 下载离线包 pywin32 228 版本,下载的文件名为 pywin32-228-cp36-cp36m-win32.whl

image

2、进入下载目录,打开命令行工具执行以下命令

代码语言:javascript复制
pip install pywin32-228-cp36-cp36m-win32.whl

3、安装成功,报错仍然存在

源码浏览

在 win32com 模块中,明明可以看到 client 模块,为啥导入使用时,就会报错呢?

进入 win32com 的初始化文件中 __init__.py 文件中看看 ,首先导入 其他几个模块 win32apipythoncom

代码语言:javascript复制
import win32api, sys, os
import pythoncom

其他代码也并没有找到相关的有用信息

改变策略

1、改变导包方式如下:

代码语言:javascript复制
# 直接导入 win32com 下的 client
import win32com.client

app = win32com.client.Dispatch('Word.Application')
app.Visible = True
app.Documents.Open("F:\learning\wincom32_demo\demo.doc")

或者(与上面效果一样)

代码语言:javascript复制
from win32com.client import Dispatch
app = Dispatch('Word.Application')
app.Visible = True
app.Documents.Open("F:\learning\wincom32_demo\demo.doc")

2、运作成功,可正常打开准备的 Word 文件,报错消除、问题解决

结语

通过一顿折腾,总算处理了这个 bug ,bug 虐我千百遍,我待 bug 如初恋。 回过头来,会发现,其实这只是一个小问题,但排查、处理起来却需要不少时间。

在日常工作、生活中,不也是如此吗,在经历众多尝试仍不能成功时,不妨停下脚步,静一静、思考些许,换个角度看待问题,改变策略处理问题,也许问题就可被轻松解决。

希望这次分享能给遇到类似问题的朋友一些帮助,更多相关文章请前往公号:可乐python说 ,再会。

444.前面都无效

1 人点赞