前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3.6无法安装PYWIN32的问题,解决方法

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

作者头像
用户3519280
发布2023-07-08 10:59:45
8100
发布2023-07-08 10:59:45
举报
文章被收录于专栏:c++ 学习分享c++ 学习分享

1

pip install

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

2

 原因是PYTHON3.6未在HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\写入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_USER\SOFTWARE\Python]
[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore]
[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.6]
[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.6\Help]
@=""
[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.6\Help\Pythonwin Reference]
@="C:\\Python\\Python36\\Lib\\site-packages\\PyWin32.chm"
[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.6\InstallPath]
@="C:\\Python\\Python36"
[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.6\PythonPath]
@="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.前面都无效

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档