使用pyInstaller打包的一点经验

转载,来自:http://blog.csdn.net/DexterChen/article/details/37727539

Popen

在脚本状态下stdout=None,  stderr=None时运行不会有任何问题,但经过pyInstall打包成exe后,运行时会出现 ”[Error 6] The handle is invalid” 异常,解决方法如下:

脚本原始调用方法

适配pyInstaller的写法

Multiprocessing

代码中直接使用标准库中的multiprocessing.Process和multiprocessing.Pool,在打包成可执行程序后会创建进程失败。

对于pyinstaller的one-directory模式,只要再程序的最开始调用multiprocessing. freeze_support()就可以了,但对于one-file模式,还需要使用下面修改后的Process和Pool。

模块引用

脚本运行状态下,当需要使用全路径引用py文件时(如当前模块路径的父目录中的.py文件),可以通过添加路径的方法减少引用层数。假设plugins处于代码的根目录下,如果想引用plugins\Demo1\Demo1MainFrame.py,可以用下述方法:

import  plugin.Demo1. Demo1MainFrame

也可以先在程序最开始执行:

sys.path.append("./Plugins")

然后再使用:

import  Demo1. Demo1MainFrame

但遗憾的是,这种方法在pyInstaller打包后的程序中不能使用,会出现模块导入错误。

其它

  • 打包过程中若遇到临时文件访问权限的问题,可临时禁用杀毒和防火墙功能后再尝试;
  • pyInstall仅支持ascii编码方式,打包后可执行文件数径中不能有中文。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注