跳到主要内容

Python 打包

Cython 加 PyInstaller

首先,确保你的环境中安装了 Poetry、Cython 和 PyInstaller。如果还没有安装,可以使用以下命令安装:

pip install poetry cython pyinstaller

编译 Python 代码为 Cython

Cython 是一个优化的静态编译器,它可以将 Python 代码转换为 C 代码,进而编译成共享库(.so 文件)或 DLL 文件(.dll 文件)。这个过程涉及到创建一个 .pyx 文件的副本来替换 .py 文件,并在项目中设置 Cython 编译环境。

  1. 创建 Cython 文件:将你的 .py 文件复制为 .pyx 文件。例如,对于你的 daily_tasks.py,创建一个 daily_tasks.pyx 文件。

  2. 编写 setup.py 文件:在你的项目根目录中创建一个 setup.py 文件,用于编译 Cython 文件。示例内容如下:

    from setuptools import setup
    from Cython.Build import cythonize

    setup(
    ext_modules = cythonize("**/*.pyx", compiler_directives={'language_level' : "3"}),
    zip_safe=False,
    )
  3. 编译项目:运行以下命令来编译你的项目:

    python setup.py build_ext --inplace

这将编译 .pyx 文件为 .c 文件,并进一步编译为共享库文件。

使用 PyInstaller 打包项目

在项目根目录下,运行 PyInstaller 并指定你的项目入口点(如 __main__.py 文件)。确保所有需要的资源文件(如在 assets/ 目录下的文件)也被包含在打包过程中。

pyinstaller --onefile src/__main__.py

你可能需要通过添加 --add-data 选项来手动包含一些非 Python 文件。例如,如果你需要包括 assets/ 目录中的文件,可以这样做:

pyinstaller --onefile src/__main__.py --add-data "src/app/assets/*;assets/"

请注意,--add-data 的语法依赖于操作系统;Windows 使用分号 (;) 作为分隔符,而 Linux 和 macOS 使用冒号 (:)。

使用 Nuitka 打包项目

Nuitka 是另一个 Python 代码编译器,它可以将 Python 代码编译为 C 代码,然后编译为可执行文件。与 PyInstaller 不同,Nuitka 不会创建一个独立的打包文件,而是生成一个可执行文件。

所以上面编译出 Cython 文件的步骤可以省略,直接使用 Nuitka 来编译 Python 代码。

Nuitka 怎么打包消息?

pip install nuitka

然后,使用以下命令来打包你的项目:

nuitka --standalone src/__main__.py

Nuitka 并不直接支持打包静态资源到可执行文件中,但允许你指定数据文件(通过 --include-data-file--include-data-dir 参数),这可以用来在编译时包括非代码文件。这些文件将被复制到最终的可执行文件目录中,你的应用程序可以像平常一样访问这些文件。

例如,如果你想要包含一个名为 example.jpg 的图片文件,位于项目根目录的 data/images 目录下,你可以在 Nuitka 的命令行中添加如下参数:

--include-data-dir=data/images=data/images

这会将 data/images 目录及其内容复制到编译后的应用程序输出目录中,保持原有的目录结构。然后你的应用程序可以通过相对路径 data/images/example.jpg 访问该图片。