python3.6如何生成exe程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3.6如何生成exe程序相关的知识,希望对你有一定的参考价值。
参考技术APyInstaller的原理简介
PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指
望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装python和你的脚本依赖的
库。在Linux操作系统下,它主要用的binutil工具包里面的ldd和objdump命令。
PyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析
器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。
推荐:Python教程
可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其他
包,或某个版本的Python,就可以直接运行了。
需要注意的是,PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运
行,就必须针对该平台进行打包。
pyinstaller将Python脚本打包成可执行程序,使在没有Python环境的机器上运行
最新版是pyinstaller 3.1.1。支持python2.7和python3.3+。
可运行在Windows,Mac和Linux操作系统下。
但它不是跨编译的,也就是说在Windows下用PyInstaller生成的exe只能运行在Windows下,在Linux下生成的只能运行在Linux下。
pyinstaller在windows下的安装
使用命令pip install pyinstaller即可
在windows下,pyinstaller需要PyWin32的支持。当用pip安装pyinstaller时未找到PyWin32,会自动安装pypiwin32。
打包
打包的app里并不包含任何源码,但将脚本的.pyc文件打包了。
基本语法:
pyinstaller options myscript.py
常用的可选参数如下:
--onefile 将结果打包成一个可执行文件
--onedir 将所有结果打包到一个文件夹中,该文件夹包括一个可执行文件和可执行文件执行时需要的依赖文件(默认)
--paths=DIR 设置导入路径
--distpath=DIR 设置将打包的结果文件放置的路径
--specpath=DIR 设置将spec文件放置的路径
--windowed 使用windows子系统执行,不会打开命令行(只对windows有效)
--nowindowed 使用控制台子系统执行(默认)(只对windows有效)
--icon=<FILE.ICO> 将file.ico添加为可执行文件的资源(只对windows有效)
更多技术请关注Python视频教程。
如何在python脚本中获取exe的输出?
【中文标题】如何在python脚本中获取exe的输出?【英文标题】:How to get output of exe in python script? 【发布时间】:2010-10-19 09:09:11 【问题描述】:当我在 Python 中调用外部 .exe
程序时,如何从 .exe
应用程序获取 printf
输出并将其打印到我的 Python IDE?
【问题讨论】:
【参考方案1】:要从 Python 调用外部程序,请使用 subprocess 模块。
子进程模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。
文档中的一个示例(output
是一个提供子进程输出的文件对象。):
output = subprocess.Popen(["mycmd", "myarg"], stdout=subprocess.PIPE).communicate()[0]
一个具体的例子,使用cmd
,带有2个参数的Windows命令行解释器:
>>> p1 = subprocess.Popen(["cmd", "/C", "date"],stdout=subprocess.PIPE)
>>> p1.communicate()[0]
'The current date is: Tue 04/14/2009 \r\nEnter the new date: (mm-dd-yy) '
>>>
【讨论】:
不,不要使用 os.popen(),它已经被子进程淘汰了。 那么在这种情况下如何设置环境变量?myarg 是环境变量? 不,'myarg' 是命令 'mycmd' 的参数。您可以使用“env”关键字参数传递环境。给它一个包含您要使用的环境的字典。 使用 subprocess.Popen([.....], stdout=..., env="YOUR ENV DICTIONARY") 见:***.com/questions/2231227/… 在 Python 3 中,您可能希望使用...communicate()[0].decode()
来获取实际的 string
输出,而不是 byte
输出。【参考方案2】:
我很确定您在这里谈论的是 Windows(基于您问题的措辞),但在 Unix/Linux(包括 Mac)环境中,命令模块也可用:
import commands
( stat, output ) = commands.getstatusoutput( "somecommand" )
if( stat == 0 ):
print "Command succeeded, here is the output: %s" % output
else:
print "Command failed, here is the output: %s" % output
commands 模块提供了一个非常简单的接口来运行命令并获取状态(返回码)和输出(从 stdout 和 stderr 读取)。或者,您可以通过分别调用 commands.getstatus() 或 commands.getoutput() 来获取状态或仅输出。
【讨论】:
以上答案适用于python2,在python3中getstatusoutput和getoutput可以在子进程中找到。以上是关于python3.6如何生成exe程序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 cxfreeze 将我的代码从 python3.6 转换为 exe?
想用pyinstaller打包成exe的运行文件,打包出来的exe文件会停止工作,怎么破?我安装的是Python3.7 64位