学习自:

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. Mongodb全备+增备+oplog恢复误删数据

    此时测试表中有7条数据,做个全备. 全备: mongodump --host=192.168.43.43 --port=37017 --oplog --out=/opt/mongo/fullbacku ...

  2. 人口信息普查系统-JavaWeb-三

    今天给大家分享前端主页面的代码,设有五个功能.涉及到增删改查,用到了超链接的跳转. <!DOCTYPE html> <html lang="en"> < ...

  3. python基础详解

    python基础部分 python基础一 python基础二 Python最详细,最深入的代码块小数据池剖析 深浅copy python文件操作 python函数部分 python函数初识 pytho ...

  4. Vue.js的组件(slot/动态组件等)、单文件组件、递归组件使用

    一.组件 1> 组件命名方式有两种(注意:在DOM模板中只有kebab-case命名方法才生效): html中引用组件: <!-- 在DOM模板中,只有 kebab-case命名才生效 - ...

  5. Servlet中的Filter 过滤器的简单使用!

    package com.aaa.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servle ...

  6. ApacheCN Kali Linux 译文集 20211020 更新

    Kali Linux 秘籍 中文版 第一章 安装和启动Kali 第二章 定制 Kali Linux 第三章 高级测试环境 第四章 信息收集 第五章 漏洞评估 第六章 漏洞利用 第七章 权限提升 第八章 ...

  7. 势能分析(splay分析)

    定义 第\(x\)次操作后,势能为\(\phi(x)\),该操作实际复杂度\(c(x)\),均摊复杂度\(a(x)\). 定义\(a(x)=c(x)+\phi(x)-\phi(x-1)\). 那么总复 ...

  8. 在windows、widfly环境下,远程debug

    最近:一直想弄一个远程debug模式,奈何没有接触过,导致畏首畏尾,不过,两天时间终于搞出来了雏形,真的是一个坑一个坑踩过来的. widfly环境:widfly8 准备工作:远程运行环境:省略,前面一 ...

  9. JS 将Table内容导出到Excel(样式设计)

    转载请注明来源:https://www.cnblogs.com/hookjc/ function saveAsExcel(tableID){ var tb = new TableToExcel(tab ...

  10. Jackson转换为Collection、Array

    1. Jackson转化为Array 注意的地方就是实体类一定要有无参的构造方法,否则会报异常 //com.fasterxml.jackson.databind.exc.InvalidDefiniti ...