【Python可执行文件生成】使用pyinstaller对多个文件的Python项目生成可执行(.exe)文件

    技术2022-07-10  157

    【Python可执行文件生成】使用pyinstaller对多个文件的Python项目生成可执行(.exe)文件

    前言多文件项目的可执行文件生成环境准备可执行文件生成

    前言

    Python的单件模式(Singleton)和接口模式(Interface) 我在上面这篇博客谈到了:将C++的工程计算代码转成Python代码时,两个常见的设计模式(单件模式和接口模式)的C++代码和Python代码实现的区别。

    OK,我花了一周的时间完成了代码的转换(快夸夸我哈哈哈)。紧接着的一个问题就是可执行文件的生成。生成可执行文件的原因有如下几点:

    你需要把代码发给一个完全不懂代码的人,比如你完成了一个小游戏,但是你不能指望玩你这个游戏的小孩子都懂Python。但是小孩子还是懂双击运行.exe文件的。知识产权保护。当你的代码具有知识产权时,往往不希望被人白嫖,这种时候就需要生成二进制的可执行文件,这样就可以保证只有电脑能看懂你的代码。跨电脑运行。很多时候你在自己电脑上完成了代码并且运行通过了,你的老板想在他的电脑上跑一下你的代码看看运行效果。但是你老板电脑上什么环境都没配置过,这种时候就比较适合提供一个简单的.exe文件,比较节省时间。

    去网上一搜,基本上都是单个Python文件如何生成exe文件,难得的几篇多文件生成的文章,要么是讲述的很乱,要么就是存在问题。所以我在这里理了一下如何使用pyinstaller对多个文件的Python项目生成可执行(.exe)文件。

    多文件项目的可执行文件生成

    环境准备

    安装pyinstaller

    $ pip install pyinstaller

    确保你的python版本为2.7或者3.4~3.7

    $ python --version

    我相信你自己项目内的环境肯定已经配置好了,比如科学计算常用的numpy库,作图常用的matlibplot库,人工智能常用的pytorch库或者计算机视觉常用的opencv-python库等等。(一般你的项目能正常在命令行中运行就已经配置好了。)

    可执行文件生成

    假设你的项目文件结构为:

    - project - folder1 - file1-1.py - file1-2.py - ... - folder2 - file2-1.py - file2-2.py - ... - main.py - other1.py - other2.py - ...

    我们先来看一下pyinstaller的命令:

    $ pyinstaller -F [主文件] -p [文件夹] --hidden-import [模块文件]

    简单解释一下各个参数:

    -F:Create a one-file bundled executable. 使用该参数会只生成一个单独的exe文件,如果不使用该参数会生成一堆依赖文件。 主文件:就是程序运行的入口文件,例如上面的main.py -p [文件夹]: A path to search for imports (like using PYTHONPATH). Multiple paths are allowed, separated by ‘;’, or use this option multiple times. 该参数后面跟项目下的文件夹名称。 --hidden-import [模块文件]: Name an import not visible in the code of the scripts(s). This option can be used multiple times.该参数后面跟"project"目录下零散的单独文件,例如上面的other1.py和other2.py等等。

    (上面的英文直接摘取的pyinstaller的帮助文档,可以保证我说的是正确的。) 一般我们为了项目的干净,会把exe文件生成到一个专门的build文件夹中,假定我们在project目录下新建了一个build文件夹如下面所示:

    - project - build - folder1 - folder2 - main.py - other1.py - other2.py - ...

    在build文件下运行终端。(如果你安装了git的话,直接进到build文件夹中,然后右键选择Git Bash Here就能打开一个终端。如果你是Windows系统,进到build文件夹中,按住Shift右键选择在此处打开PowerShell窗口。如果你是Linux或者Mac OS系统,平常使用终端都是家常便饭,我就不赘述了。)以上述项目文件结构为例,运行如下命令:

    $ pyinstaller -F ../main.py -p ../folder1 -p ../folder2 --hidden-import ../other1.py --hidden-import ../other2.py

    如果有其他文件夹和文件,按照上面的方法添加 -p 和 --hidden-import 选项即可。需要注意一点:文件夹或文件的路径需要给出相对路径,例如 . ./main.py

    运行完上述命令之后,我们可以在build文件夹下找到两个新生成的文件夹build和dist,dist文件夹下就是相应的exe文件(exe文件的名称和主文件的名称相同),这个exe文件可以拷贝到任意位置运行(build文件夹里的东西可以不管),最后的文件结构为:

    - project - build - build - dist - main.exe - folder1 - folder2 - main.py - other1.py - other2.py - ...

    祝大家编程愉快!!!

    Processed: 0.016, SQL: 9