Pyinstaller如何使用--onefile选项将数据嵌入到exe文件中?

时间:2015-11-19 21:04:26

标签: python exe pyinstaller

使用Pyinstaller的--onefile选项构建exe文件时,可以指定数据(如图片或其他......)

在运行期间,创建了一个tmp目录(MEI *),其中包含python解释器,您原始格式的数据......

Pyinstaller如何嵌入所有这些数据?

.exe文件只是机器码指令对吗?它们不应该是"容器文件" ...

谢谢!

2 个答案:

答案 0 :(得分:2)

您是否阅读了pyinstaller手册?

https://pythonhosted.org/PyInstaller/#id22

  

单文件程序的工作原理引导加载程序是其中的核心   单文件包也。启动时,它会在中创建一个临时文件夹   此操作系统的相应临时文件夹位置。该文件夹已命名   _MEIxxxxxx,其中xxxxxx是随机数。

     

一个可执行文件包含所有Python的嵌入式存档   脚本使用的模块,以及任何压缩副本   非Python支持文件(例如.so文件)。引导加载程序解压缩   支持文件并将副本写入临时文件夹。   这可能需要一点时间。这就是为什么单文件应用程序有点   比单文件夹应用程序启动慢。

     

创建临时文件夹后,引导加载程序完全继续   对于单文件夹包,在临时文件夹的上下文中。   当捆绑代码终止时,引导加载程序将删除临时代码   文件夹中。

     

(在Linux和相关系统中,可以挂载/ tmp文件夹   没有执行"没有执行"选项。该选项与a不兼容   PyInstaller单文件包。它需要执行/ tmp中的代码。)

     

因为程序会创建一个具有唯一名称的临时文件夹,所以   可以运行应用程序的多个副本;他们不会干扰每一个   其他。但是,在磁盘空间中运行多个副本的成本很高   因为什么都没有分享。

     

如果程序崩溃或是,则不会删除_MEIxxxxxx文件夹   杀死(在Unix上杀死-9,在Windows上被任务管理器杀死,"强制   退出"在Mac OS上)。因此,如果您的应用经常崩溃,您的用户将会   丢失多个_MEIxxxxxx临时文件夹的磁盘空间。

答案 1 :(得分:0)

好吧,我发现了这个:https://en.wikipedia.org/wiki/Executable_compression

压缩数据可以与解压缩代码一起组成一个可删除的。

因此,Pyinstaller可能包含一个运行时打包程序来执行此操作。