项目结构
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.py的build_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. 验证打包结果
-
进入
build/目录,运行生成的可执行文件。 -
测试是否正常加载/处理