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

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

前言

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

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

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

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

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

环境准备

  1. 安装pyinstaller

     $ pip install pyinstaller
    
  2. 确保你的python版本为2.7或者3.4~3.7

     $ python --version
    
  3. 我相信你自己项目内的环境肯定已经配置好了,比如科学计算常用的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
	- ...

祝大家编程愉快!!!

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 如果在使用 pyinstaller 编译 Python 脚本为 exe执行文件后,双击 exe 文件后程序瞬间就会关闭,那么可能是因为编译过程中出现了错误。你可以尝试使用 pyinstaller 的 `--debug` 选项来调试编译过程中的错误。 例如,你可以使用以下命令来编译 Python 脚本: ``` pyinstaller --debug script.py ``` 这将生成一个名为 `script.exe` 的可执行文件,并在命令行窗口中显示编译过程中的错误信息。你可以通过查看这些信息来了解 exe 文件瞬间关闭的原因。 另外,你还可以尝试使用 pyinstaller 的 `--log-level` 选项来查看日志信息,这可能会有助于你找到问题的原因。例如,你可以使用以下命令来编译 Python 脚本: ``` pyinstaller --log-level=DEBUG script.py ``` 这将生成一个名为 `script.exe` 的可执行文件,并在命令行窗口中显示更多的日志信息。 此外,如果 exe 文件瞬间关闭的原因是 Python 脚本中的错误,你可以尝试使用 Python 自带的调试工具来查找问题。例如,你可以在 Python 脚本中加入 `import pdb; pdb.set_trace()`,然后使用 pyinstaller 编译脚本,这样在执行 exe 文件时 ### 回答2: Python使用pyinstaller编译生成执行文件后,双击exe打开瞬间就关闭通常是由以下问题导致的: 1. 异常错误:程序在某行代码运行时发生异常,导致程序崩溃并关闭。这可能是由于编译过程中某些依赖项未被正确打包导致的。解决方法是检查代码中存在的问题,并确保程序所需的所有依赖库被正确地导入和使用。 2. 控制台窗口闪现:在使用pyinstaller编译生成exe时,默认情况下会同时生成一个控制台窗口。在某些情况下,控制台窗口可能会在打开后立即关闭,导致程序无法正常运行。解决方法是使用命令行参数`--noconsole`或修改pyinstaller配置文件,将控制台窗口禁用。 3. 缺少资源文件:如果程序依赖于某些资源文件(如图像、配置文件等),编译生成exe文件可能无法正确地访问这些资源文件,导致程序无法正常运行。解决方法是确保资源文件被正确地打包到可执行文件中,并在代码中使用正确的路径来访问这些资源。 4. 运行权限问题:有时在某些操作系统上,可执行文件需要管理员权限才能正常运行。如果没有足够的权限,双击exe文件可能会导致程序瞬间关闭。解决方法是右键点击exe文件,选择“以管理员身份运行”来启动程序。 总结:Python使用pyinstaller编译生成exe文件瞬间关闭可能是由于代码异常、控制台窗口闪现、资源文件缺失或权限问题所导致。需要逐一排查问题并解决,以确保程序能够正常运行。 ### 回答3: Python使用pyinstaller编译exe执行文件后,双击exe打开瞬间就关闭可能是由于以下几个问题导致: 1. 程序报错:在编译过程中,可能出现了错误,但是这些错误并没有被正确地显示出来。运行时若有报错,程序会立即关闭,无法执行正确的操作。在编译之前,最好在命令行中运行.py文件,以查看是否有报错信息。如果有报错,需要修复并重新编译。 2. 缺少依赖项:有时候,编译的exe文件可能缺少某些依赖项,导致程序无法正常执行。解决这个问题的方法是手动将缺少的依赖项添加到exe文件的目录中,或者使用pyinstaller的"--add-data"参数将依赖项包含在exe文件中。 3. 资源文件路径问题:当程序涉及到读取外部文件(如图片、音频等)时,如果资源文件的路径不正确,程序也会在运行时立即关闭。需要确保在编译exe文件时,资源文件的路径是正确的。 4. 使用了图形界面相关的库:在编译exe文件时,如果使用了某些图形界面相关的库(如PyQt、Tkinter等),可能会出现兼容性问题导致程序无法正常运行。这时需要查看官方文档或调整编译参数以解决兼容性问题。 总之,双击exe文件打开后立即关闭可能是由于程序报错、缺少依赖项、资源文件路径不正确或者兼容性问题导致的。解决这个问题的方法是仔细检查编译过程中是否有报错,确保所有的依赖项都被正确处理,并检查资源文件的路径是否正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值