将python源文件打包成exe文件,器重讲明pyinstaller的用法

By admin in 4858.com on 2019年4月20日

一.施用场景

一.pyinstaller简介

pyinstaller将Python脚本打包成可实行程序,使在未有Python意况的机器上运转

摩登版是pyinstaller 3.壹.一。援助python2.7和python3.三+。
可运维在Windows,Mac和Linux操作系统下。
但它不是跨编写翻译的,也正是说在Windows下用PyInstaller生成的exe只可以启动在Windows下,在Linux下转移的只可以运行在Linux下。

pyinstaller 库的利用

在我们做到三个Python项目或二个程序时,希望将Python的py文件打包成在Windows系统下间接能够运转的exe程序。那里我们介绍1种简单常用的办法,pyinstaller模块

一.1 轶事背景

自己要好用python写了贰个小程序发给别的同事用,给她的正是3个.py文件,但是他感觉比较辛苦,还要设置情状,他问小编有未有简短一点的点子,笔者给三个exe文件,他就绝不安装情状就能够运作笔者的主次,笔者心目在想那样麻烦,还要自身跟你打包改成exe,不过不可能,什么人叫是好情人了,笔者就应允他了。

贰.pyinstaller在windows下的安装

运用命令pip install pyinstaller就能够
在windows下,pyinstaller供给PyWin3二的辅助。当用pip安装pyinstaller时未找到PyWin3贰,会活动安装pypiwin3二

4858.com 1

4858.com 2

并发Successfully installed pyinstaller-叁.一.一 pypiwin3二-21九即意味着安装成功

PyInstaller是一个不行使得的第二方库,它亦可在Windows、Linux、Mac OS X
等操作系统下将 Python 源文件打包,通过对源文件打包,Python
程序能够在未曾安装 Python
的碰着中运营,也足以用作3个单身文件方便传递和治本。PyInstaller
供给在命令行(调整台)下用pip 工具安装,如下:

  1. 直接pip安装

①.贰 搜索素材

在写c#的时候,面向nuget编制程序(什么人叫四渣渣程序猿了);在攻读python此前就在此以前有成千上万零部件(畅快的飞起),伊始在github和google上搜索能源,最后开掘以下多少个东西
连锁来源

  • PyInstaller:将 Python
    程序调换来单身的举行理文件书(跨平台)。官网
  • dh-virtualenv:营造并将 virtualenv 虚拟情状作为二个 Debian
    包来公布。将python源文件打包成exe文件,器重讲明pyinstaller的用法。官网
  • Nuitka:将脚本、模块、包编写翻译成可实践文件或增加模块。官网
  • py贰app:将 Python 脚本变为单独软件包(Mac OS
    X)。官网
  • py二exe:将 Python
    脚本变为单独软件包(Windows)。官网
  • pynsist:贰个用来创立 Windows 安装程序的工具,能够在安装程序中封装
    Python 自身。官网

三.打包

装进的app里并不带有其他源码,但将脚本的.pyc文件打包了。

着力语法:
pyinstaller options myscript.py
常用的可选参数如下:
–onefile 将结果打包成一个可实行文件
–onedir
将具备结果打包到一个文书夹中,该文件夹包涵2个可实行文件和可实行文件施行时索要的依赖性文件(暗中认可)
–paths=DILacrosse 设置导入路线
–distpath=DITiggo 设置将打包的结果文件放置的路径
–specpath=DI宝马7系 设置将spec文件放置的渠道
–windowed 使用windows子系统施行,不会打开命令行(只对windows有效)
–nowindowed 使用调节台子系统实行(默许)(只对windows有效)
–icon=<FILE.ICO>
将file.ico增添为可实践文件的财富(只对windows有效)

如pyinstaller –paths=”D:\Queena” guess_exe.py

:\>pip install pyinstaller 

一.三 技术方案

由此对照,最后摘取了地方例子中的 pyinstaller

四.小实例(windows下)

写好游戏文件guess_exe.py,代码如下:

__author__ = 'qa-2'
# -*- coding:utf-8 -*-
# 摇3次骰子,当总数total,3<=total<=10时为小,11<=total<=18为大
import random
import time

def enter_stake(current_money):
    '''输入小于结余的赌资及翻倍率,未考虑输入type错误的情况'''
    stake = int(input('How much you wanna bet?(such as 1000):'))
    rate = int(input("What multiplier do you want?你想翻几倍?(such as 2):"))
    small_compare = current_money < stake * rate
    while small_compare == True:
        stake = int(input('You has not so much money ${}!How much you wanna bet?(such as 1000):'.format(stake * rate)))
        rate = int(input("What multiplier do you want?你想翻几倍?(such as 2):"))
        small_compare = current_money < stake * rate
    return stake,rate

def roll_dice(times = 3):
    '''摇骰子'''
    print('<<<<<<<<<< Roll The Dice! >>>>>>>>>>')
    points_list = []
    while times > 0:
        number = random.randrange(1,7)
        points_list.append(number)
        times -= 1
    return points_list

def roll_result(total):
    '''判断是大是小'''
    is_big = 11 <= total <= 18
    is_small = 3 <= total <= 10
    if is_small:
        return 'Small'
    elif is_big:
        return 'Big'

def settlement(boo,points_list,current_money,stake = 1000,rate = 1):
    '''结余'''
    increase = stake * rate
    if boo:
        current_money += increase
        print('The points are ' + str(points_list) + ' .You win!')
        print('You gained $' + str(increase) + '.You have $' + str(current_money) + ' now.' )
    else:
        current_money -= increase
        print('The points are ' + str(points_list) + ' .You lose!')
        print('You lost $' + str(increase) + '.You have $' + str(current_money) + ' now.' )
    return current_money

def sleep_second(seconds=1):
    '''休眠'''
    time.sleep(seconds)


# 开始游戏
def start_game():
    '''开始猜大小的游戏'''
    current_money = 1000
    print('You have ${} now.'.format(current_money))
    sleep_second()
    while current_money > 0:
        print('<<<<<<<<<<<<<<<<<<<< Game Starts! >>>>>>>>>>>>>>>>>>>>')
        your_choice = input('Big or Small: ')
        choices = ['Big','Small']
        if your_choice in choices:
            stake,rate = enter_stake(current_money)
            points_list = roll_dice()
            total = sum(points_list)
            actual_result = roll_result(total)
            boo = your_choice == actual_result
            current_money = settlement(boo,points_list,current_money,stake,rate)
        else:
           print('Invalid input!')
    else:
        sleep_second()
        print('Game Over!')
        sleep_second(2)

if __name__ == '__main__':
    start_game()

自此命令行,切换成guess_exe.py的目录下,
输入:

pyinstaller --onefile --nowindowed --icon=" D:\Queena\PyCharmProjects\dist1\computer_three.ico" guess_exe.py

4858.com 3

4858.com 4

就会在此时此刻文件下造成build文件夹、dist文件夹和.spec文件。
dist里就是guess_exe.exe可实行文件。

4858.com 5

举个例子有打包错误,具体看build里的warn***.txt文书档案,里面详细记载了不当的因由。一般都以库丢失。
spec文件告诉PyInstaller怎样去管理脚本。它对脚本名以及超越四分之二pyinstaller的可选参数举办加密。PyInstaller正是通过奉行spec文件的始末来build
the app。

pip install pyinstaller

1.四 pyinstaller 使用教程整理

  1. 直接在指令行用pip安装
    pyinstaller【第3次索要安装成功后,前面就不须要再设置了】

pip install pyinstaller

4858.com 6

  1. 在指令行中切换成要打包的先后所在目录,直接输入下边包车型大巴通令就能够

pyinstaller learn01.py -F

4858.com 7

pyinstaller参数 含义
-F 指定打包后只生成一个exe格式的文件
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c –console, –nowindowed 使用控制台,无界面(默认)
-w –windowed, –noconsole 使用窗口,无控制台
-p 添加搜索路径,让其找到对应的库。
-i 改变生成程序的icon图标
-h pyinstaller各个参数的讲解

伍. 参与麻瓜编制程序心得:

本身最大的感想是吸重力教程的姣好,它明显、简洁、易懂。
录像学习进程中深入体会到了编写制定者的用心,精美的配图加上适量的背景音乐,基础知识和适合的小项目,那1雨后冬笋的配套完毕了麻瓜的别致。
成功的学会九千0数目标爬取之后,那种成就感大概了呀哎,不可能言喻。之后是数码的可视化还有各类图片以及浮未来网页上,那两次三番串的实现都让自家很心潮澎湃,而且那一个本事让本身在事情才具上有了十分大的晋升,以往跳槽笔者又有了本钱,十一分多谢麻瓜!

6. 参考网站:
http://pythonhosted.org/PyInstaller/
http://blog.csdn.net/zc02051126/article/details/8827868


想上手实战的小白看苏醒,那里有搜狐云课堂上最火爆的 Python 课程:Python
实战:四周学会爬虫系统

:\>pip3 install pyinstaller 
  1. 履新或升官

一.5 关于 pyinstaller 使用总计

在用 pyinstaller
打包成exe后,点击运行,发现向来闪退,有点懵逼,预计确定是友善的行使格局不对,后来也去google上索求了,开采也有人也在搜寻
pyinstaller
打包exe后闪退的相关难点,遵照教程尝试了一些篇,找了一些天一贯尚未优质的答案,开采依然闪退。既然没找到答案,那么自身就去youtube上找个广播次数相比多的科目看看,看看别个怎么用法,最后大神的课程中找到了化解办法,在代码最终边丰硕相关代码就行,笔者整理了一晃二种做法:

# 1.暂停的第一种方式
# time.sleep(10)

# 2.暂停的第二种方式
# input("Press <enter>")

# 3.暂停的第三种方式 (比较推荐这个)
# 提示使用之前,记得引入相关组件 import os
os.system("pause")

来看以上的做法,突然想起来了在c#中写调节台的场景,最终都会加一句一下代码(假如不加,那就间接退出调整台了,看不到运行后的调整台重回的参数:

Console.Read();

PyInstaller 的官网网站为
库会自动将 PyInstaller 命令安装到 Python 解释器目录中,与 pip 或 pip三命令路线一样,由此能够向来运用。使用PyInstaller 库十三分大约,请小心,由于
PyInstaller 不援救源文件命中有英文句号(.)存在,如若 dpython.py 文件在
D:\codes 目录中,命令如下:

壹.陆 相关参考教程

  1. 乐乎的入门教程
  2. awesome中国语言历史学连串
  3. b站录像教程1
  4. b站录制教程二
:\>pyinstaller dpython.py 
pip install --upgrade pyinstaller

4858.com ,或

  1. 下载文件安装进入setup.py所在路径,实行python setup.py install
    即可
:\>pyinstaller D:\codes\dpython.py 

用pyinstaller打包文件

实行落成后,源文件所在目录将扭转 dist 和 build 多少个公文夹。在那之中,build
目录是 pyinstaller 存款和储蓄目前文件的目录,能够高枕无忧删除。最终的包装程序在
dist 内部的 dpython 目录中。目录中其余文件是可施行文件 dpython.exe
的动态链接库。能够透过-F 参数对 Python
源文件生成二个独自的可实行文件,如下:

pyinstaller -F test.py
:\>pyinstaller -F dpython.py 

常用参数表明:

实行后在 dist 目录中现身了 dpython.exe
文件,未有其余借助库,试行它就能够。使用 PyInstaller
库需求注意以下难点:文件路线中无法冒出空格和英文句号(.);源文件必须是
UTF-八 编码,暂不支持任何编码类型。采取 IDLE编写的源文件都封存为 UTF-八编码情势,可一直动用。PyInstaller 有一些常用参数,如下所示:

  • –icon=Logo路线
  • -F 打包成三个exe文件
  • -w 使用窗口,无调节台
  • -c 使用调控台,无窗口
  • -D 创制1个索引,里面包罗exe以及此外一些借助文件
  • pyinstaller -h 来查看参数

-h, –help 查看帮忙
-v, –version

回到目的文件目录,开采该目录下生成了.spec文件test.spec,打包好的exe文件,在同目录的dist文件中,也能够经过pyinstaller
改造生成exe程序的Logo,pyinstaller -F –icon=my.ico test.py

查看 PyInstaller 版本

  • windows用户推行操作后频仍会发出程序闪退的状态,那是因为包装程序时相关库以及别的条件模块并从未在共同打包,那里有二种缓和格局:

–clean 清理打包进程中的一时文件
-D, –onedir
默认值,生成 dist 目录
-F, –onefile
在 dist 文件夹中只生成单身的打包文件第
-p DICRUISER, –paths DI宝马X3 增加 Python 文件使用的第二方库路径
-i <.ico or .exe,ID or .icns>,–icon <.ico or .exe,ID or .icns
>钦点打包程序采纳的图标(icon)文件

  1. 将exe拖到cmd中推行,终端里面就会有出口
  2. 在代码最终进入input操作,待用户输入后才会甘休
  3. 规律和方面1个看似,这里能够更有利的行使python自带的msvcrt,他会自行获取用户的输入并重返,即到达了点击放肆键截止,如下:

PyInstaller 命令不要求在 Python
源文件中加进代码,只供给经过命令行举行打包就可以。-F
参数最为常用,对于富含第一方库的源文件,能够运用-p
加多第二方库所在路线。假若第三方库由 pip 安装且在Python
意况目录中,则不需求运用-p 参数。

您可能感兴趣的文章:

  • 用PyInstaller把Python代码打包成单个独立的exe可施行文件
  • 采纳PyInstaller将python转成可进行文件exe笔记
  • 透过Py二exe将和煦的python程序打包成.exe/.app的办法
  • 利用python编写轻巧的小程序编写翻译成exe跑在win十上
  • 解析Python中的eval()、exec()及其有关函数
  • python的exec、eval使用分析
  • python学习课程之使用py二exe打包
  • 详解python中executemany和连串的选取方法
  • Python之py2exe打包工具详解
  • 详解Python三.陆的py文件打包生成exe
import msvcrtprint(" ********** 按任意键结束 **********")msvcrt.getch()

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有