`
isiqi
  • 浏览: 16488536 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

手动制作python的exe可执行程序 -- by Leo Jay

阅读更多

Python没有内建一个编译为exe的功能。给python程序的部署带来不少的麻烦。

所以就会出现一些py2exe之类的很不错的工具,用于自动把.py文件编译为.exe文件。

最近抽空研究了一下手动实现类似py2exe的功能,希望加强对python的了解。

结果还相当不错。把结果记录下来,与大家共享。

1.1. 原理

文中所描述的方法,基于python的以下几个功能

1. python程序运行时,会在sys.path指定的路径中查找库文件。

2. python从2.3开始,支持从zip文件中import库(支持.py,.pyc和.pyo,但不支持.pyd)

3. python提供C API,让c语言的程序,可以很方便的调用python的程序

1.2. 实际步骤

注:假设python安装在c:\python25目录中,最后的可执行文件放到d:\dist目录中

1. 先去c:\python25\Lib目录,把所有文件都复制出来,比如复制到d:\pythonlib目录中

2. 开一个cmd窗口,进入d:\pythonlib目录中,运行 python-OOcompileall.py-f. 把lib中的.py文件都编译成.pyo文件

3. 删除d:\pythonlib目录中所有的.py和.pyc文件,因为我们只要有.pyo文件就可以让这些库运行了。

4. 删除目录中所有用不着的文件,比如curses,test,idlelib,msilib等,以减少生成文件的体积。

5. 把这些库打包成一个zip文件,比如stdlib.zip,放到d:\dist目录中

6. 把c:\python25\dlls目录中的.pyd和.dll文件,复制到d:\dist\dlls目录中,当然,删除不可能用到的一些文件_msi.pyd,_ssl.pyd等等,可以减少文件的体积

7. 把自己写的程序,也按步骤2至步骤5所说的方法,打成一个mysrc.zip包,放到d:\dist目录中。 注意:自己写的程序的入口应该是main.pyo文件

8. 用以下C程序编译出一个可执行文件,比方说叫runpy.exe,也放到d:\dist中。

#include <Python.h>
#include <Windows.h>
int main()
{
        // 得到当前可执行文件所在的目录
        char szPath[10240];
        char szCmd[10240];
        GetModuleFileName(NULL, szPath, sizeof(szPath));
        char* p = strrchr(szPath, '\\');
        if (p == NULL)
        {
                printf("Get module file name error!\n");
                return -1;
        }
        *p = 0;
        // 把sys.path设定为['.', '自己的源代码zip文件', '标准库zip文件', 'dll目录']
        // 然后调用main模块
        sprintf(szCmd,
                "import sys\n"
                "sys.path=['.', r'%s\\mysrc.zip', r'%s\\stdlib.zip', r'%s\\dlls']\n"
                "import main\n",
                szPath, szPath, szPath);
        Py_Initialize();
        PyRun_SimpleString(szCmd);
        return 0;
}

9. 把python25.dll放到d:\dist目录中。

1.3. 结束语

这样来,d:\dist目录中,一共只有4个文件加一个目录:

  • dlls目录:用于存放所有的dll文件和pyd文件

  • stdlib.zip文件:用于存放所有的python的.pyo文件格式的标准库

  • mysrc.zip文件:用于存放自己写的程序。注意,自己写的程序的入口在main.pyo中。

  • runpy.exe文件:程序的启动文件,启动后会设定python的sys.path,然后调用main模块

  • python25.dll文件:python的核心dll,runpy.exe依赖于这个dll


  • 哈哈,相当的简洁明了吧。一共才4个文件一个目录,5MB都不到哦。

注:当然,这种打包方式第一次做的时候比较麻烦,但之后就可以只要把自己的程序打包就好了,其它的不用变。

而且,如果自己的程序经常做改动的话,自己的程序也可以不打包,直接放到d:\dist中,反正runpy.exe启动程序的时候,只要能正常运行import main就可以了。

分享到:
评论

相关推荐

    python-3.10.11-amd64.exe

    python-3.10.11-amd64.exe

    手动制作python的exe可执行程序

    ### 手动制作Python的EXE可执行程序 #### 一、引言 在Python开发过程中,有时我们需要将脚本程序打包成独立的.EXE文件以便于分发和执行。然而,Python本身并不具备直接将脚本转换为EXE文件的功能,这在一定程度上...

    python-3.8.0-embed-amd64.zip

    8. `python.exe`:这是Python的可执行文件,用户可以直接运行它来启动Python命令行或者执行Python脚本。 这些文件的组合使得开发者能够在不完全安装Python的情况下,仍然可以运行Python 3.8的程序。这对于便携式...

    python-3.9.10-amd64.exe 安装包windows

    这个“python-3.9.10-amd64.exe”安装包就是为Windows用户设计的,旨在提供一个便捷的方式去安装Python环境。 首先,我们来了解一下Python 3.9.10的关键特性。这个版本包含了一些性能改进和错误修复,确保了代码...

    python-3.9.10-amd64.exe

    "python-3.9.10-amd64.exe" 是Python 3.9.10版本针对AMD64架构(也称为x86_64或64位)的Windows操作系统提供的安装程序。这个安装包确保用户能够在Windows环境下快速便捷地安装Python 3.9.10。 Python 3.9.10是...

    企业编码管理的程序-python源码-可执行程序-论文.zip

    企业编码管理的程序-python源码-可执行程序-论文.zip 在PyCharm中运行《企业编码生成系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,只需要输入...

    python-3.10.2 python-3.10.1 python-3.9.10 embed python最新安装包

    python-3.10.1-amd64.exe python-3.10.2-amd64.exe python-3.9.10-embed-amd64.zip python-3.9.10-amd64.exe python-3.10.1-embed-amd64.zip python-3.10.2-embed-amd64.zip

    python-3.11.5-embed-amd64.zip

    总之,"python-3.11.5-embed-amd64.zip"是一个针对64位Windows系统的Python精简版,包含了运行Python程序所需的基本组件。通过这个压缩包,开发者可以创建独立的Python运行环境,提高软件的可移植性和部署效率。

    python-3.9.9-amd64.exe

    python-3.9.9-amd64.exe

    学生管理系统的程序-python源码-可执行程序-论文.zip

    学生管理系统的程序-python源码-可执行程序-论文.zip 《学生信息管理系统》程序使用说明 在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。...

    python-3.12.0-embed-amd64.zip

    总的来说,Python 3.12.0-embed-amd64.zip 是为了简化部署和执行Python应用而设计的,特别是对于那些不需要完整Python环境的轻量级应用或独立可执行程序而言,它提供了一种高效且方便的解决方案。

    python-3.11.9-amd64.exe.cab

    python-3.11.9-amd64.exe.cab

    python-3.9.9-embed-amd64.zip

    标题 "python-3.9.9-embed-amd64.zip" 暗示这是一个针对64位Windows系统的Python 3.9.9嵌入式版本的压缩包。这个压缩包包含了运行Python程序所需的多个核心组件和依赖库,使得用户可以在不完整安装Python解释器的...

    MySQL-python-1.2.3.win32-py2.7 MySQL-python-1.2.3.win-amd64-py2.7

    这个压缩包包含了两个版本的MySQL-python安装程序:一个适用于32位系统(MySQL-python-1.2.3.win32-py2.7.exe),另一个适用于64位系统(MySQL-python-1.2.3.win-amd64-py2.7.exe)。这两个文件都是为Python 2.7版本...

    python官方3.8.4rc1-amd64版本exe安装包

    全名:python-3.8.4rc1-amd64.exe python的安装与使用: https://blog.csdn.net/qq_38161040/article/details/87295245

    python_docx-0.8.10-py2.py3-none-any.whl

    原来是通过命令行下载的docx安装包还没有完全兼容python3,估计这个安装包还只兼容python 2(python2 和python3差别还是挺大的,虽然现在python 3出来很久了,但是不少三方库还没有更新),因此需要自己找一个兼容的包...

    python官方3.7.1rc1-amd64版本exe安装包

    全名:python-3.7.1rc1-amd64.exe python的安装与使用: https://blog.csdn.net/qq_38161040/article/details/87295245

    python-3.9.13-amd64安装包

    Python 3.9.13 是 Python 语言的一个重要版本,发布于2022年5月17日。此版本适用于现代操作系统,但不支持Windows 7或更早的操作系统,这意味着如果你的电脑运行的是这些旧版Windows,将无法安装和使用这个Python...

    python安装包python-3.7.7-amd64.exe.zip

    Python是非常流行的程序脚本语言,广泛用于互联网应用,科学计算,人工智能等领域。本下载包为本人从官网下载的,主要供国内网速慢的用户下载,版本为Python-3.7.7-amd64.exe Windows 64位安装包

Global site tag (gtag.js) - Google Analytics