构建

1 安装依赖

1
2
3
sudo apt install -y gettext # 用于构建多语言文件
pip install -r requirements/common.txt
pip install pyinstaller

2 构建多语言文件

1
2
3
for file in i18n/*; do \
	msgfmt -o $file/LC_MESSAGES/macast.mo $file/LC_MESSAGES/macast.po;\
done

3 构建macast二进制文件

1
2
3
4
5
6
7
8
9
10
pyinstaller --noconfirm -F -w \
            --additional-hooks-dir=. \
            --add-data="macast/.version:." \
            --add-data="macast/xml/*:macast/xml" \
            --add-data="i18n/zh_CN/LC_MESSAGES/*.mo:i18n/zh_CN/LC_MESSAGES" \
            --add-data="macast/assets/*.png:assets" \
            --exclude-module=tkinter \
            --exclude-module=pyqt \
            Macast.py

注意事项

减小二进制文件体积(移除不需要的依赖)

使用pyinstaller打包有时候会把没有用到的包也打包进二进制文件中,这会导致打包之后的文件较大。有两个解决办法:

1 推荐创建新的python虚拟环境或者使用全新的系统环境安装macast依赖的pip包。

2 把明确不需要的包排除在外,比如Macast没有使用tkinter或pyqt,那么可以在构建时指明--exclude-module=tkinter --exclude-module=pyqt

pyinstaller对非主流cpu架构的支持

注意到昨天pyinstall的develop分支合并了一个修复非主流cpu架构的bug:https://github.com/pyinstaller/pyinstaller/pull/6306

希望这有助于解决某些问题(似乎需要手动安装pyinstaller develop的最新分支)

附:X86 docker构建镜像

提供了一个预装pyinstaller和部分依赖的docker镜像,可以用于跨系统快速构建Macast Linux二进制文件

1
2
3
4
5
6
7
8
9
10
11
12
13
git clone https://github.com/xfangfang/Macast.git && cd Macast
for file in i18n/*; do msgfmt -o $file/LC_MESSAGES/macast.mo $file/LC_MESSAGES/macast.po; done
docker run --rm -v "$(pwd):/src/" xfangfang/build-macast \
            'pip install -r requirements/linux.txt && \
            pyinstaller --noconfirm -F -w \
            --additional-hooks-dir=. \
            --add-data="macast/.version:." \
            --add-data="macast/xml/*:macast/xml" \
            --add-data="i18n/zh_CN/LC_MESSAGES/*.mo:i18n/zh_CN/LC_MESSAGES" \
            --add-data="macast/assets/*.png:assets" \
            --exclude-module=tkinter \
            --exclude-module=pyqt \
            Macast.py'