学习自:

Python 程序打包成 exe 可执行文件 - 不夜男人 - 博客园

Python生成Windows可执行exe文件 - 韩小北 - 博客园

pyinstaller参数介绍以及总结_BearStarX的博客-CSDN博客_pyinstaller常用参数

0、引言

Python执行时的不同文件:

①.py:源码;需要安装Python和源码依赖的各种库。

②.pyc:py文件的二进制码;发布者不想让源码被运行者看到,作用上同.py,需要安装Python和源码依赖的各种库。

③可执行文件:不同平台上的可执行文件后缀也不同,比如Windows系统下的.exe文件

将Python脚本打包为可执行文件的方式:PyInstaller、py2exe

1、PyInstaller

①使用

假设需要转化为exe文件的文件名为myscript.py

使用前需要先安装PyInstaller库,安装完成后使用PyInstaller的语法为:

pyinstaller [options] script [script...] | specfile

最简单的用法为,在myscript.py同目录下执行命令:

pyinstaller myscript.py

然后就会看到新增加了两个目录build和dist,dist下面的文件就是可以发布的可执行文件,上面的命令执行完毕后可以发现dist目录下有一些文件——库和myscript可执行文件。有时这样会感觉比较麻烦,需要打包dist下面的所有东西才可以发布,万一丢掉一个动态库就无法运行了,好在pyinstaller支持单文件模式,只需要执行:

pyinstaller -F myscript.py

上述命令运行后,你会发现dist目录下只有一个可执行文件,这个单文件就可以发布了,可以运行在你正在使用的OS类似的OS下。当然,pyinstaller还有其他各种选项,例如-d选项用于debug。

当然,即使这样也是有出错的可能性,比如源文件中需要用到某个图片,那么必须把该图片放置到和exe文件同目录下才可以。

在执行pyinstaller命令时,会在和py文件相同的目录下,生成一个.spec文件,该文件会告诉pyinstaller如何处理你的所有脚本,同时包含了命令选项。一般我们不需要理会这个文件,若需要打包数据文件,或者给打包的二进制增加一些Python的运行时选项时……,需要手动编辑.spec文件。可以使用如下代码:

pyi-makespec optionsscript [script...]

创建一个.spec文件,对于手动编辑的.spec文件,我们可以使用下面的任意一条命令:

pyinstaller specfile
pyi-build specfile

②原理

Pyinstaller其实就是把Python解析器与脚本文件打包成为一个可执行文件,和编译成为真正的机器码是两回事,所以打包成一个可执行文件并不会提高运行效率,它的好处在于在运行者的机器上不需要安装python和库。在Linux操作系统下,它主要用的binutil工具包中的ldd和objdump命令。

可以直接发布输出文件夹中的文件或者生成的可执行文件。你只需要告诉用户,你的应用APP是自我包含的,不需要安装其他包,或者某个版本的Python,就可以直接运行了。

需要注意的是,Pyinstaller打包的执行文件,只能运行于和打包时OS同样的OS下,不具备可移植性,如果需要在不同系统上运行,就必须针对该平台进行打包。

③参数

pyinstaller -F -w -p D:\tmp\core-python\libs -i d:\tmp\main.ico myscript.py

注意,每个单个字符都有其对应的全拼写法,二者的区别在于单个字符前边是一个-,而全拼前是两个-即--;此外,所有字符,不论全拼还是缩写的位置都可以任意放置

常用参数

参数

-x -xxx:缩写和全称

说明
-F,-onefile 生成单个可执行文件,只适用于代码都在一个py文件内的情况
-D,-onedir 创建一个目录,包含exe文件,但是会依赖很多文件,适合以框架形式编写代码,易维护
-d,-debug 产生debug版本的可执行文件
-w,-windowed,-noconsole 使用Windows子系统执行,执行时不打开命令行
-p DIR,-path=DIR 自定义需要加载的类路径,一般情况下用不到
-i DIR,-icon=DIR 可执行文件的图标

④补充

Q1:exe文件运行时如何去除弹出的命令行窗口

A:

1、如果是使用.spec文件时,在该文件中找到console=True修改为console=False

2、如果是指定Python文件进行pyinstaller打包的话,需要添加--noconsole

pyinstaller myscript.py --noconsole

如果想只打包为一个exe:

pyinstaller -F myscript.py --noconsole

pyinstaller -F -w myscript.py

Q2:如何更换最终exe生成路径

A:

在cmd中,一开始就要通过cd指令(具体用法间见命令行窗口cmd:访问C盘根目录和其他盘 - ShineLe - 博客园)切换到输出文件夹,然后再用上面的代码(不过要注意的是,此时给出py文件时必须以绝对路径的方式,否则会找不到文件)。

Q3:多文件exe的生成

A:

-F只适用于单个py文件生成为exe,如果有多个py文件,彼此间存在依赖关系,就不能用-F了(实际用法中也不用别的参数,只是不用-F就行了)

而是用-D参数,用法和-F相同,也是

pyinstaller -D xxx.py

https://www.2bboy.com/archives/155.html

Q4:py文件中用到了某些图片

A:

需要把py中用到的所有非库文件(图片、txt等)都放在dist目录下,这样才能使用相对路径。更好的做法是,为每种类型或每个功能用到的这些额外的文件在dist目录下单独建立一个文件夹

2、py2exe

(py2exe似乎只支持Python3.3以后的版本)

py2exe是一个将py文件转换为exe的工具。py2exe已经被用于创建wxPython、Tkinter、Pmw、PyGTK、pygame、win32com client、server等。py2exe是发布在开源许可证下的。

①用法

如果想将脚本文件myscript.py转换为exe文件,那么需要额外编写一个用于发布程序的设计脚本,这里假设为文件mysetup.py,那么在其中需要用导入包py2exe,并用setup方法(该方法需要从distutiles.core中导入)构建,具体用法如下:

from distutils.core import setup
import py2exe
setup(console=['C:\Users\...\myscript.py'])
#注意这里应该用绝对路径
#相对路径应该也可以,但是即使这两个文件在同一个文件夹下,仍会显示不存在myscript.py文件
#至于相对路径应该是什么,我并没有探究,有兴趣的可以自己探索一番

然后按照下面的方法运行mysetup.py

python3 mysetup.py py2exe

上边的命令执行后将产生一个名为dist的目录(这个目录在C:\Users\Adminstrator下,让我好找),其中包含了myscript.exe、各种dll、library.zip这些文件。

如果py文件中用了已经编译的C扩展模块,那么这些模块也会被拷贝在各子目录中,同样,所有的dll文件在运行时都是需要的,除了系统的dll文件。dist子目录中的文件包含了你的程序所必须的东西,你应该将这个子目录中的所有内容一起发布。

运行下边的命令,将显示py2exe命令的所有命令行标记:

python3 mysetup.py py2exe -help

②指定额外的文件

一些应用程序在运行时需要额外的文件,诸如配置文件、字体、位图。如果在安装脚本中用data_files可选项指定了那些额外的文件,那么py2exe能将这些文件拷贝到dist子目录中。data_files应包含一个元组(target-dir,files)列表,其中的files是这些额外的文件的列表。

示例如下:

from distutils.core import setup
import glob
import py2exe setup(console=[r'C:\Users\...\myscript.py'])
data_files=[('bitmaps',['bm\large.gif','bm\small.gif'],('font',glob.glob('font\\*.fnt')))]

代码说明:data_files选项将创建一个子目录dist\bitmaps,其中包含两个.gif文件;一个子目录dist\fonts,其中包含了所有的.fnt文件。

Python:构建可执行exe文件的更多相关文章

  1. python生成可执行exe文件

    为什么要生成可执行文件 不需要安装对应的编程环境 可以将你的应用闭源 用户可以方便.快捷的直接使用 打包工具 pyinstaller 安装pyinstaller pip install pyinsta ...

  2. 将 Python 程序打包成 .exe 文件

    1.简介 做了一个excel的风控模板,里面含有宏,我用python的第三方xlwings部署到linux后发现,linux环境并不支持xlwings. Python 程序都是脚本的方式,一般是在解析 ...

  3. linux上jenkins连接windows并执行exe文件

    1.如果要通过ssh的方式来连接windows的话,首先需要在windows上安装freesshd来配置启动.配置ssh(win10上自带了openssh可以进行安装使用,但我机器装不上) 1.1.下 ...

  4. Python 使用cx_freeze 生成exe文件【转】

    Python 使用cx_freeze 生成exe文件   在python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller.py2exe恐怕是三 ...

  5. 把Python项目打包成exe文件

    我们很多时候,写好的程序需要打包成.exe文件才可以发给客户,那么今天我就来谈一谈,如何将一个写好的Python程序打包成exe文件! 首先,我们我们使用到的工具是python 3.7 和 Pyins ...

  6. python代码打包成exe文件

    1.准备工作 1.安装pywin32.pyinstaller 2.准备好ico文件 找一个png格式的图片,使用png2ico脚本生成包含以下6个尺寸的ico文件:128×128 64×64 48×4 ...

  7. Python生成Windows可执行exe文件

    环境 python3.6.5 pyinstaller3.5 windows 10 下载地址 python:https://www.python.org/ftp/python/3.6.5/python- ...

  8. python制作电脑可执行exe文件

    python获取IP.主机名.mac地址 关注公众号"轻松学编程"了解更多. 制作get_IP.py文件: import socket import uuid # 获取主机名 ho ...

  9. python脚本 pyqt 打包成windows可执行exe文件 pyinstaller

    今天学习pyqt,做了一些好玩的东西. 好奇之中想试试python脚本编译成可执行文件,一顿查询之后成功了! 我的环境是: windows10 64bit    python3.5    pyqt5 ...

随机推荐

  1. 测试开发实战[提测平台]19-Echarts图表在项目的应用

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 在图表统计展示方面,笔者目前使用过的两种开源,分别是 Echats 和 G2Plot 组件,从个人使用上来讲前者应用更广.自定义开发更灵活 ...

  2. linu查看系统用户与显示命令行提示符格式信息

    目录 一:查看系统用户whoami 二:显示命令行提示符格式信息变量 一:查看系统用户whoami whoami : 当前窗口登录的用户 who : 当前用户登录系统的终端 作用: 显示当前用户登录了 ...

  3. kubernetes之手动部署k8s 1.14.1高可用集群

    1. 架构信息 系统版本:CentOS 7.6 内核:3.10.0-957.el7.x86_64 Kubernetes: v1.14.1 Docker-ce: 18.09.5 推荐硬件配置:4核8G ...

  4. python 小兵(5)参数

    我们目前为止,已经可以完成一些软件的基本功能了,那么我们来完成这样一个功能:约x 1 2 3 4 5 pint("拿出手机") print("打开陌陌") pr ...

  5. Airtest 的连接安卓模拟器

    1. 开启安卓模拟器 2. 查看进程,MEmuHeadless.exe的进行程号, 然后在cmd中输入 netstat -ano|findstr "16116" 3. 到 airt ...

  6. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.11

    公告 我们始终与所有创作者站在一起,为创作自由而战.我们还会提供一切必要的技术支持. 我们全力支持科研开源(DOCX)计划.希望大家了解这个倡议,把这个倡议与自己的兴趣点结合,做点力所能及的事情. 我 ...

  7. JVM学习二:JVM之GC算法和种类

    我们前面说到了JVM的常用的配置参数,其中就涉及了GC相关的知识,趁热打铁,我们今天就学习下GC的算法有哪些,种类又有哪些,让我们进一步的认识GC这个神奇的东西,帮助我们解决了C 一直挺头疼的内存回收 ...

  8. linux 进程信号

    转载请注明来源:https://www.cnblogs.com/hookjc/ signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受 到 ...

  9. Linux下Wordpress忘记密码后的解决方法

    进入Wordpress的数据库,找到wp_users表,使用MD5('你的密码')函数添加密码 示例: 修改admin的密码为123456 UPDATE wp_users SET user_pass= ...

  10. 用代码创建并实例化在storyboard中声明的ViewController

    我们的项目最早是基于storyboard开发的,所以一开始所有的ViewController都通过storyboard创建,并通过segue连接跳转 但是今天其中一个controller的view,我 ...