cxfreeze 打包

项目结构

your_project/
│── main.py          # 主程序
│── csdn_utils.py    # 处理CSDN文章的模块
│── requirements.txt # 依赖列表
└── data/            # 存放文章数据(如有)

2. 安装 cx_Freeze

bash

pip install cx_Freeze

3. 创建打包脚本 setup.py

python

from cx_Freeze import setup, Executable# 依赖项(根据你的实际依赖修改)
build_options = {"packages": ["requests", "bs4"],  # 示例:如果爬取CSDN需要requests/BeautifulSoup"excludes": [],"include_files": ["data/"]        # 包含数据文件夹(如有)
}# 主程序配置
executables = [Executable("main.py", base="Win32GUI" if sys.platform == "win32" else None)]setup(name="CSDN_Article_Processor",version="1.0",description="处理CSDN文章的工具",options={"build_exe": build_options},executables=executables
)

4. 打包命令

bash

python setup.py build

生成的可执行文件会在 build/ 目录下。

5. 常见问题解决

问题1:缺少依赖
  • 现象:打包后运行报错 ModuleNotFoundError

  • 解决:在 setup.pybuild_options 中手动添加缺失的包:

    python

  • "packages": ["requests", "bs4", "lxml"],  # 补充遗漏的库
问题2:动态加载的数据丢失
  • 现象:程序依赖运行,但打包后无法访问。

  • 解决

    • 将数据文件(如 articles.json)放入 include_files

      python

  • "include_files": ["data/articles.json"]
  • 或在代码中检查是否为打包环境,调整路径:

    python

    • if getattr(sys, 'frozen', False):data_path = os.path.join(sys._MEIPASS, "data/articles.json")
      else:data_path = "data/articles.json"
问题3:反爬机制导致打包后失效
  • 现象:爬虫行为,返回403。

  • 解决

    • 在代码中添加请求头模拟浏览器:

      python

    • headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."
      }
      requests.get(url, headers=headers)
    • 考虑使用 selenium 动态渲染(需额外打包浏览器驱动)。


6. 高级配置(可选)

  • 单文件打包:使用 bdist_msi 生成安装包:

    bash

  • python setup.py bdist_msi
  • 隐藏控制台窗口(仅Windows)

    python

  • Executable("main.py", base="Win32GUI")  # 适用于GUI程序

7. 验证打包结果

  1. 进入 build/ 目录,运行生成的可执行文件。

  2. 测试是否正常加载/处理