pyinstaller能够在Windows、Linux等操作系统下将Python脚本打包成可直接运行程序。使Python脚本可以在没有安装Python的环境中直接运行,方便共享。

开发环境

python 2.7.12 + Windows7

注意事项

1、待转换的.py文件绝对路径最好不要包含中文字符。容易出现一些莫名其妙的问题。

2、python中需要有.py文件中用到的第三方库。否则在转换后的.exe文件中会出现不符合预期的结果。

pyinstaller安装步骤

1、配置pip镜像源。pip配置方法参考pip配置和安装第三方模块。如果已经配置,跳过。

2、打开cmd命令行窗口,输入pip install pyinstaller,安装pyinstaller库。

C:\Users\Administrator>pip install pyinstaller
Collecting pyinstaller
Downloading http://pypi.doubanio.com/packages/3c/86/909a8c35c5471919b3854c01f43843d9b5aed0e9948b63e560010f7f3429/PyIns
taller-3.3.1.tar.gz (3.5MB)
100% |████████████████████████████████| 3.5MB 112kB/s
Requirement already satisfied: setuptools in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: pefile>=2017.8.1 in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: macholib>=1.8 in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: dis3 in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: future in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: altgraph>=0.15 in c:\python27\lib\site-packages (from macholib>=1.8->pyinstaller)
Installing collected packages: pyinstaller
Running setup.py install for pyinstaller ... done
Successfully installed pyinstaller-3.3.1

3、确认pyinstaller安装结果,位于c:\Python27\Scripts路径下。执行where pyinstaller查看

C:\Users>where pyinstaller
c:\Python27\Scripts\pyinstaller.exe

pyinstaller基本语法

pyinstaller [options] script

options常用选项说明:

-F,-onefile: 表示生成单个可执行文件,常用。
-w, -windowed, -noconsole:表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标。注意:图片后缀必须是.ico
-c,console,-nowindowed:使用控制台,无窗口(默认)
-D,-onedir:创建一个目录,包含EXE文件,但会依赖很多文件(默认选项)

基本实例:pyinstaller -F myscript.py。

pyinstaller更多语法见官网说明:https://pyinstaller.readthedocs.io/en/stable/usage.html

pyinstaller原理简介

pyinstaller其实就是把python解释器和脚本打包成一个可执行文件,和编译成真正的机器码是完全两回事。所以打包不一定会提高运行效率,可能会降低运行效率,但是好处是在运行者机器上不用安装python和脚本所依赖的库。

输入指定的脚本后,首先pyinstaller会分析该脚本所依赖的其他依赖,然后进行查找、复制,把所有相关的依赖都收集起来并惊醒加密处理,包括python解释器,最后把这些文件放在一个目录下,或者打包到一个可执行文件。然后就可以直接运行所生成的可执行文件。

需要注意的是,使用pyinstaller打包生成的可执行文件,只能再和打包机器系统相同的环境下运行。32位python环境打包的程序可以运行在32/64位windows系统上。64位python环境打包的程序只能运行在64位windows系统上。所以如果想打包程序的话,建议使用32位python环境打包。

pyinstaller使用实例

1、确认待转换的.py文件可正确运行,不存在语法错误。如ccc.py

2、执行pyinstaller -F ${Python脚本名}完成文件转换。.exe文件生成的绝对路径会在倒数第二行显示,通常位于当前目录下dist所在目录下。转换后的.exe文件名与python文件名相同。如下图所示

d:\Program Files\Notepad++>pyinstaller -F ccc.py
213 INFO: PyInstaller: 3.3.1
226 INFO: Python: 2.7.12
237 INFO: Platform: Windows-7-6.1.7601-SP1
.......
8136 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 4940)
10315 INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully.
10341 INFO: Bootloader c:\python27\lib\site-packages\PyInstaller\bootloader\Windows-32bit\run.exe
10355 INFO: checking EXE
10369 INFO: Building EXE because out00-EXE.toc is non existent
10386 INFO: Building EXE from out00-EXE.toc
10401 INFO: Appending archive to EXE d:\Program Files\Notepad++\dist\ccc.exe
10432 INFO: Building EXE from out00-EXE.toc completed successfully.

FAQs

1、如果Python脚本使用到了第三方库,如何打包?

方法一:将第三方库对应的包复制到待打包python脚本的同目录下,再执行打包命令。

方法二:pyinstaller.exe -F  路径\文件名.py 路径\文件名.py

2、我的python脚本主要是命令行输出,但是程序执行完就退出无法查看相关信息,如何处理?

在python脚本最后一行添加命令:os.system('pause') 或者 raw_input('Press enter any key to exit...')

3、 我想给我的打包后的执行程序换个图标,如何处理?

使用参数-i。如命令:pyinstaller -F -i tupian\qq.ico ccc.py。文件后缀名必须是.ico

4、程序运行出现CMD窗口,如何去除?

带上参数-w即可。pyinstaller.exe -F call_login.py -w (-w表示去掉控制台窗口显示)

使用Pyinstaller转换.py文件为.exe可执行程序的更多相关文章

  1. pyinstaller打包py文件成exe文件时,出现ImportError: No module named 'pefile'错误解决办法!

    首先pyinstaller的安装与使用详见如下链接: 安装完成之后,命令行中输入pyinstaller之后,结果如下: ImportError: No module named 'pefile' 缺少 ...

  2. pyinstaller打包.py程序为.exe操作指南

    pyinstaller打包.py程序为.exe操作指南 20190526内容纲要: 1.pyinstaller安装 2.程序封装 3.可执行程序 0 前言 今天第一次试试将一个py程序封装成一个.ex ...

  3. pyinstaller打包python文件成exe(原理.安装.问题)

    py文件打包成exe文件的方式一共有三种:py2exe.PyInstaller和cx_Freeze 本文分四个步骤来详讲如何用PyInstaller将py文件打包成exe文件 1. PyInstall ...

  4. python预课04 列表,元祖,统计值计算示例,py文件转为EXE文件,爬虫初步学习

    列表,元组 #list l1 = [1, 2, 3, '高弟弟'] #定义一个列表 #增 l1.append("DSB") #最后增加"DSB"的元素 #删 l ...

  5. 【PyInstaller安装及使用】将py程序转换成exe可执行程序

    1  配置所需的环境 平台:windows7 64位,已经安装了python(x,y) 若未安装python环境,请自行安装python2.7或者其他版本,Python安装完成以后,需要将Python ...

  6. pyinstaller将py文件转成exe格式

    首先要注意一下:打包python文件成exe格式这个过程只能在windows环境下运行 1. 直接在命令行用pip安装 pyinstaller pip install pyinstaller 2. 下 ...

  7. 【Python学习】使用Pyinstaller将py文件导出为exe文件

    PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,但是它不是跨编译的,也就是说在Windows下用PyInstaller生成的exe只能运行在Windows下,在 ...

  8. 使用PyInstaller将.py文件打包并生成Windows下可执行的.exe文件

    最近要使用Qt写一个简单的GUI程序,因此使用了PyQt5来加快开发,使用PyQt5生成可执行的程序时,在Windows操作系统下可以使用pyinstaller库将.py文件及其相关依赖生成为.exe ...

  9. py文件转换为exe文件

    遇到这个问题时在网上找了一会资料,很多博客的方法很旧了,介绍一种最简单的,pyinstaller. 时间比较早的资料还在介绍如何安装pip(python的包管理器),其实python中已经自带pip了 ...

随机推荐

  1. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...

  2. python操作Redis安装、支持存储类型、普通连接、连接池

    一.python操作redis安装和支持存储类型 安装redis模块 pip3 install redis 二.Python操作Redis之普通连接 redis-py提供两个类Redis和Strict ...

  3. mysql 循环写入数据库

    测试过程经常用到插入数据 我们首先建一个函数: delimiter # create procedure test_double() begin declare i int default 0; de ...

  4. _ZNote_Qt_按钮增加图片

    给Button添加图片方法 有三种 一 : 用代码添加 QPushButton *findBtn = new QPushButton(this); //创建按钮 QIcon ico (":/ ...

  5. IntelliJ IDEA的main方法,for循环,syso的快捷键

    原文链接:http://blog.csdn.net/tiantiandjava/article/details/42269173 今天偶然发现了IntelliJ中 创建main函数的快捷键,依次还有f ...

  6. OpenCV Mat格式存储YUV图像

    YUV图像用的比较多,而且YUV图像的格式众多(YUV格式可以参考YUV pixel formats),如何用OpenCV的Mat类型来存储YUV图像也是经常遇到的问题. 对于YUV444图像来说,就 ...

  7. Codeforces831A Unimodal Array

    A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  8. js数组中容易误用的一些方法

    1.every和some 两个方法的参数都是一个函数,函数的有3个参数,依次是当前值value,索引index,数组array every判断数据中的每一项是否满足某个条件,如果满足就返回true,有 ...

  9. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  10. Docker学习笔记-两种发布方式

    第一种,自己手写dockerfile发布,上传至hubDocker 正常发布到文件夹中,发布文件上传至linux机器上.如 /www/app 将Dockerfile文件也复制到同目录 ./www/ap ...