You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pywin32创建独立Python程序时缺失pywintypes模块的问题

问题:使用zipapp创建依赖pywin32的独立Python程序时,出现pywintypes模块缺失错误

在Windows系统上尝试用zipapp创建依赖Python解释器的独立程序(不生成exe),脚本通过pywin32实现Word转PDF功能。执行python -m pip install -t myapp pywin32后运行脚本,出现如下报错:

Traceback (most recent call last): File "D:\Parsa Projects\Python-PDF\myapp\main.py", line 3, in <module> import win32com.client File "D:\Parsa Projects\Python-PDF\myapp\win32com\__init__.py", line 8, in <module> import pythoncom File "D:\Parsa Projects\Python-PDF\myapp\pythoncom.py", line 2, in <module> import pywintypes ModuleNotFoundError: No module named 'pywintypes'

尝试安装pypiwin32到myapp目录,问题仍未解决。

我的Python代码

import argparse
import pathlib
import win32com.client
import os

def convert_word_to_pdf(word_file_path, pdf_file_path):
    if not os.path.exists(word_file_path):
        raise FileNotFoundError(f"The file {word_file_path} does not exist.")
    word = win32com.client.Dispatch('Word.Application')
    word.Visible = False

    try:
        doc = word.Documents.Open(word_file_path)
        doc.SaveAs(pdf_file_path, FileFormat=17)
        doc.Close()
    except Exception as e:
        print(f"An error occurred: {e}")
    finally:
        word.Quit()

def main():
    filepath = os.path.abspath('D:\\Parsa Projects\\Python-PDF\\file-sample_100kB.docx')
    print(filepath)
    pdf_path = os.path.abspath('D:\\Parsa Projects\\Python-PDF\\file-sample_100kB.pdf')
    convert_word_to_pdf(filepath, pdf_path)
if __name__ == "__main__":
    filepath = os.path.abspath('D:\\Parsa Projects\\Python-PDF\\file-sample_100kB.docx')
    print(filepath)
    pdf_path = os.path.abspath('D:\\Parsa Projects\\Python-PDF\\file-sample_100kB.pdf')
    convert_word_to_pdf(filepath, pdf_path)

创建独立包的命令

> mkdir myapp
> xcopy /f /y main.py .\myapp\main.py
> python -m pip install -t myapp pywin32 pypiwin32
> python -m zipapp -p "C:\Users\Parsa\AppData\Local\Programs\Python\Python312\python.exe" -m main:main -c -o myapps myapp

解决方案

pywin32包含二进制扩展文件(.pyd/.dll),pip install -t不会自动复制系统级的依赖DLL,导致pywintypes无法被加载。按以下步骤修复:

  1. 清理旧目录
    删除已创建的myapp目录,避免残留文件干扰:

    rmdir /s /q myapp
    
  2. 重新安装并复制依赖文件

    • 重建目录并复制主脚本:
      mkdir myapp
      xcopy /f /y main.py .\myapp\main.py
      
    • 用pip安装pywin32到目标目录:
      python -m pip install -t myapp pywin32
      
    • 找到Python安装目录下的Lib\site-packages\pywin32_system32文件夹(示例路径:C:\Users\Parsa\AppData\Local\Programs\Python\Python312\Lib\site-packages\pywin32_system32),将其中的所有文件(如pywintypes312.dll、pythoncom312.dll)复制到myapp目录下。
  3. 验证脚本运行
    进入myapp目录,运行脚本确认错误消失:

    cd myapp
    python main.py
    
  4. 重新生成zipapp包
    确认脚本正常运行后,执行zipapp命令:

    python -m zipapp -p "C:\Users\Parsa\AppData\Local\Programs\Python\Python312\python.exe" -m main:main -c -o myapps myapp
    

内容的提问来源于stack exchange,提问作者Parsa Saei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:30:04