使用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无法被加载。按以下步骤修复:
清理旧目录
删除已创建的myapp目录,避免残留文件干扰:rmdir /s /q myapp重新安装并复制依赖文件
- 重建目录并复制主脚本:
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目录下。
- 重建目录并复制主脚本:
验证脚本运行
进入myapp目录,运行脚本确认错误消失:cd myapp python main.py重新生成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
相关产品推荐
相关产品推荐

