You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需PyInstaller/Py2exe编译Python程序及制作独立运行程序的方法

问题解答

1. 不使用PyInstaller或Py2exe编译Python程序的方法

方法一:用Cython转译并编译为原生二进制

Cython能将Python代码转译为C代码,再编译成可执行文件,还能提升部分代码的运行速度(转为原生机器码执行)。操作步骤:

  1. 安装Cython:pip install cython
  2. 针对目标Python脚本(如test.py),生成对应的C代码:
    cython --embed test.py
    
  3. 用C编译器(MinGW或MSVC)编译生成的C文件,链接Python库:
    • Windows下MinGW命令示例:
      gcc -I"你的Python安装路径\include" -L"你的Python安装路径\libs" test.c -lpython39 -o test.exe
      
    注:若要生成完全独立的exe,需链接Python静态库(默认是动态库,需自行编译Python静态版本)。

方法二:使用Nuitka编译

Nuitka是将Python代码转译为C++后编译成原生可执行文件的工具,并非打包工具,能直接提升运行效率,且支持生成独立程序:

  1. 安装Nuitka:pip install nuitka
  2. 生成独立exe:
    python -m nuitka --standalone --windows-disable-console test.py
    
    生成目录中的.exe文件可独立运行,无需额外携带Python环境。

方法三:使用cx_Freeze打包

cx_Freeze是另一种打包工具,原理类似PyInstaller但不在禁用列表内,操作步骤:

  1. 安装cx_Freeze:pip install cx_Freeze
  2. 编写setup.py:
    from cx_Freeze import setup, Executable
    
    target = Executable(script="test.py", base=None)
    setup(
        name="MyApp",
        version="1.0",
        description="My Python application",
        executables=[target]
    )
    
  3. 执行打包命令:
    python setup.py build
    
    生成的build目录下会包含可执行文件和对应依赖库。

2. 自制可运行Python脚本的独立程序(类似PyInstaller功能)

你之前的代码依赖Python DLL,是因为默认Python为动态链接版本。要制作独立程序,需静态编译Python解释器并将脚本嵌入程序中,步骤如下:

步骤1:编译Python静态库

默认Python安装包是动态链接版本,需自行编译静态库:

  • Windows(MSVC):
    1. 下载Python源码并解压,打开VS命令提示符
    2. 执行编译命令:
      .\configure --enable-shared=no
      nmake
      
      编译完成后会得到静态库pythonXX.lib(XX为版本号)和头文件。
  • Linux(GCC):
    1. 下载源码解压后执行:
      ./configure --enable-shared=no
      make
      
      得到静态库libpythonXX.a。

步骤2:将Python脚本嵌入C程序

可直接将脚本内容写为字符串常量(适合短脚本),或把脚本作为资源嵌入程序:

#include <Python.h>

int main(int argc, char **argv)
{
    // 设置程序名称,辅助Python定位资源
    Py_SetProgramName(argv[0]);
    // 初始化Python解释器
    Py_Initialize();
    
    // 嵌入Python脚本内容,支持多行字符串
    const char* script_content = R"(
print('Hello from embedded Python script!')
# 这里可添加你的业务逻辑代码
)";
    
    // 执行脚本并判断是否出错
    if (PyRun_SimpleString(script_content) != 0) {
        printf("Script execution failed\n");
    }
    
    // 清理Python解释器
    Py_Finalize();
    return 0;
}

步骤3:编译C程序为独立exe

用C编译器链接静态Python库,生成独立可执行文件:

  • Windows(MSVC):
    cl /I"Python源码目录\Include" main.c "Python编译目录\PCbuild\amd64\python39.lib" /link /OUT:embedded_app.exe
    
  • Linux(GCC):
    gcc -I"Python源码目录/include" main.c "Python编译目录/libpython39.a" -o embedded_app -lpthread -ldl -lutil
    

生成的embedded_app.exe(Linux下为可执行文件)可独立运行,无需携带Python DLL或脚本文件。

处理第三方依赖

若脚本用到第三方库(如numpy),可通过两种方式处理:

  1. 用Cython将第三方库代码编译为静态链接模块,并入主程序
  2. 将第三方库的安装目录打包到程序目录,在C程序中通过PySys_SetPath添加库路径

内容的提问来源于stack exchange,提问作者Matyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:33:11