说明

该文章写于 2024-8-28

使用

1
2
3
4
5
6
7
8
9
from cx_Freeze import setup, Executable

setup(
name="myApp",
version="1.0",
description="a simple app",
executables=[Executable("main.py")], # 项目程序的入口
)

项目根目录下创建一个文件 setup.py 并写入上述内容。

激活虚拟环境

1
.\.venv\Scripts\activate

在虚拟环境中安装这个库

1
pip install cx-Freeze

执行命令

1
python setup.py build

经测试,使用了第三方库的可以打包完成,接下来就开始测试pyQt5了

由于gui不需要输出控制台,所以还要修改 setup.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == "win32":
base = "Win32GUI" # 如果是GUI应用程序,使用Win32GUI


setup(
name="myApp",
version="1.0",
description="a simple app",
executables=[Executable("main.py", base=base)], # 项目程序的入口
)

加上icon,就修改小括号里加参数

1
Executable("main.py", base=base, icon="./assets/favicon.ico")

打包pdm项目

fittencode给的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
from cx_Freeze import setup, Executable

# 依赖项可以从 pdm.lock 文件中读取
# with open("pdm.lock", "r") as f:
# lines = f.readlines()
# dependencies = [line.strip() for line in lines if "name = " in line]

build_exe_options = {
"packages": ["project_graph"],
"includes": ["appdirs", "PyQt5"],
"include_files": [], # 如果有其他资源文件,可以在这里添加
"excludes": [],
"zip_include_packages": [],
"zip_exclude_packages": []
}

base = None
if sys.platform == "win32":
base = "Win32GUI" # 如果是GUI应用,使用Win32GUI

executables = [
Executable(
"src/project_graph/__main__.py",
base=base,
target_name="project_graph",
icon="src/project_graph/assets/favicon.ico" # 如果有图标文件,可以在这里指定
)
]

setup(
name="project_graph",
version="0.1.0",
description="Project Graph",
options={"build_exe": build_exe_options},
executables=executables
)

但实际上不太行,会报错

对于pdm这个项目,需要使用这个包:

https://github.com/frostming/pdm-packer

但实际上用这个专门打包的还是报错了