pyinstall打包及常见问题

一、pyinstall打包

代码编写完成,如何在没有python环境的电脑上运行?编写了一个GUI程序,如何把文件打包好,发给别人直接使用?其实最简单的办法就是把.py源文件,打包成可执行程序员exe文件,别人直接双击exe文件就可以运行了。

python实现打包exe有很多方案,主要有py2exe、cxfreeze、PyInstaller三种,py2exe和cxfreeze的安装过程比较麻烦,且对高版本python支持不好,虽然pyinstaller打包后文件相对较大,但是其安装的简单性和易用性得到广大Python使用者的青睐,今天就介绍pyinstaller的使用。

安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
或
pip install pyinstaller

常用参数

-h 查看帮助
-w 忽略控制台,打包gui软件时使用
-F dist目录中只生成一个exe文件
-p 表示你自己定义需要加载的类库的路径
-D 创建dist目录,里面包含exe以及其他一些依赖性文件(默认,可不添加)
-i 指定打包程序使用的图标文件

命令使用:
使用cmd进入到项目文件夹,执行如下命令:

pyinstaller -i ico.png -F -w demo.py

两种打包方式

1. 文件夹模式onedir
默认方式,使用命令:pyinstaller fileren.py
执行完命令后,在项目文件夹下多出了三个文件,build,dist和fileren.spec、pycache。

  • build文件夹用于存储日志文件。
  • dist文件夹储存可执行文件即相关依赖。
  • __pycache__文件夹里是Python版本信息。
  • fileren.spec打包的配置文件,可以配置依赖资源。

除了dist文件夹,其它都可以删除,没什么用。

这种模式下,需要把整个dist文件夹发给别人才能运行。

2.单文件模式onefile

加上-F参数,全部的依赖文件都会被打包到exe文件中,在dist文件夹中只有一个可执行文件,

把这个可执行文件发给别人就可以直接运行了。

pyinstaller -w -F fileren.py

默认的应用图标,有点丑,可以自己找一个好看点的图标。然后加上-i参数,重新打包:

pyinstaller -F -w -i folder.ico fileren.py

二、终端输出带颜色的文字

方式一 通过ANSI转义码实现

前言:当你在Python中使用print函数输出文本时,可能会想要以不同的颜色呈现文本。这可以通过使用ANSI转义码来实现。ANSI转义码是一种用于在终端上控制文本显示的特殊字符序列。下面是一个简单的例子,演示如何使用ANSI转义码在Python中以不同的颜色输出文本:

# 输出红色文本
print("\033[91mHello, world!\033[0m")
 
# 输出绿色文本
print("\033[92mHello, world!\033[0m")
 
# 输出黄色文本
print("\033[93mHello, world!\033[0m")
 
# 输出蓝色文本
print("\033[94mHello, world!\033[0m")
 
# 输出紫色文本
print("\033[95mHello, world!\033[0m")
 
# 输出青色文本
print("\033[96mHello, world!\033[0m")

在这个例子中,我们使用了ANSI转义码来设置文本的颜色。\033是ANSI转义码的起始字符,后面跟着一个方括号和一个数字序列。这个数字序列表示颜色代码。在这个例子中,我们使用了数字序列91到96来设置文本的颜色,分别对应红色、绿色、黄色、蓝色、紫色和青色。在每个输出语句的结尾处,我们使用\033[0m来恢复默认的文本颜色。

除了颜色之外,ANSI转义码还可以用于设置文本的背景色、加粗、下划线等等。以下是一些常见的ANSI转义码:

转义码 描述
\033[0m 关闭所有属性
\033[1m 设置高亮单独
\033[2m 设置一半亮度
\033[3m 斜体
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m 设置前景色为黑色
\033[31m 设置前景色为红色
\033[32m 设置前景色为绿色
\033[33m 设置前景色为黄色
\033[34m 设置前景色为蓝色
\033[35m 设置前景色为紫色
\033[36m 设置前景色为青色
\033[37m 设置前景色为白色
\033[40m 设置背景色为黑色
\033[41m 设置背景色为红色
\033[42m 设置背景色为绿色
\033[43m 设置背景色为黄色
\033[44m 设置背景色为蓝色
\033[45m 设置背景色为紫色
\033[46m 设置背景色为青色
\033[47m 设置背景色为白色

下面是一个使用ANSI转义码的例子,演示如何以不同的颜色和样式输出文本:

# 输出带有颜色和样式的文本
print("\033[1m\033[31mHello, world!\033[0m")
print("\033[1m\033[32mHello, world!\033[0m")
print("\033[1m\033[33mHello, world!\033[0m")
print("\033[1m\033[34mHello, world!\033[0m")
print("\033[1m\033[35mHello, world!\033[0m")
print("\033[1m\033[36mHello, world!\033[0m")
print("\033[1m\033[37mHello, world!\033[0m")
 
# 输出带有背景色的文本
print("\033[1m\033[41mHello, world!\033[0m")
print("\033[1m\033[42mHello, world!\033[0m")
print("\033[1m\033[43mHello, world!\033[0m")
print("\033[1m\033[44mHello, world!\033[0m")
print("\033[1m\033[45mHello, world!\033[0m")
print("\033[1m\033[46mHello, world!\033[0m")
print("\033[1m\033[47mHello, world!\033[0m")
 
# 输出带有下划线的文本
print("\033[4mHello, world!\033[0m")

在这个例子中,我们使用了ANSI转义码来设置文本的样式和颜色。例如,\033[1m表示设置高亮度,\033[31m表示设置前景色为红色。我们还可以组合不同的ANSI转义码来实现更多的效果,例如\033[1m\033[31m表示设置高亮度和前景色为红色。

需要注意的是,ANSI转义码只在支持ANSI的终端中有效。如果你的终端不支持ANSI转义码,那么输出的文本可能会出现乱码或者其他奇怪的效果。另外,ANSI转义码也可能会在不同的终端中产生不同的效果,因此在使用ANSI转义码时需要谨慎。

2.示例

代码如下(示例):

print('\033[0;30m欢迎使用学生选课系统\033[0m')
print('\033[1;31m欢迎使用学生选课系统\033[0m')
print('\033[4;32m欢迎使用学生选课系统\033[0m')
print('\033[5;33m欢迎使用学生选课系统\033[0m')
print('\033[7;34m欢迎使用学生选课系统\033[0m')
print('\033[8;35m欢迎使用学生选课系统\033[0m')
print('\033[1;36m欢迎使用学生选课系统\033[0m')
print('\033[1;37m欢迎使用学生选课系统\033[0m\n')


  可以看到,只需要将需要改变颜色的字符串写在\033[1;37m\033[0m\n中间就可以了,\033[1;37m主要是用来确定输出格式,\033[0m主要是用来结束这个格式的输出,如果没有加后面这段,如果后面还有不需要改变颜色的字符串输出,也会因为没有加这个结束标志而变的和前面的特殊字符串一样了,就起不到区分效果了。

print('\033[1;31;40m欢迎使用学生选课系统\033[0m')
print('\033[1;31;41m欢迎使用学生选课系统\033[0m')
print('\033[1;31;42m欢迎使用学生选课系统\033[0m')
print('\033[1;31;43m欢迎使用学生选课系统\033[0m')
print('\033[1;31;44m欢迎使用学生选课系统\033[0m')
print('\033[1;31;45m欢迎使用学生选课系统\033[0m')
print('\033[1;31;46m欢迎使用学生选课系统\033[0m')
print('\033[1;31;47m欢迎使用学生选课系统\033[0m')



  
  

这个是加了高亮后的效果图,个人感觉还是不加高亮的看着舒服一点。

方式二 使用termcolor

准备工作

首先,我们需要安装 termcolor 库。打开终端,输入以下命令来安装:

pip install termcolor

文字颜色输出

要在终端输出彩色文字,我们可以使用 termcolor 库中的 colored 方法。该方法需要传入两个参数:要输出的文字以及文字颜色。

下面是一个简单的示例:

from termcolor import colored

print(colored('Hello, World!', 'red'))

执行上述代码,会在终端中输出红色的“Hello, World!”字样。

除了红色,还有很多种颜色可以选择,包括但不限于:

  • 黑色('grey')
  • 红色('red')
  • 绿色('green')
  • 黄色('yellow')
  • 蓝色('blue')
  • 紫色('magenta')
  • 青色('cyan')
  • 白色('white')

我们不妨再来一个示例,输出绿色的“Success!”字样:

from termcolor import colored

print(colored('Success!', 'green'))

背景颜色输出

除了文字颜色,我们也可以将终端的背景改变成不同的颜色。

使用 termcolor 库中的 colored 方法的时候,如果要修改背景颜色,只需要在第二个参数中指定背景颜色即可。例如,下面的代码将输出红底白字的“Error!”字样:

from termcolor import colored

print(colored('Error!', 'white', 'on_red'))

除了红底白字以外,也有很多种背景颜色可以选择,例如:

  • 黑色底('on_grey')
  • 红色底('on_red')
  • 绿色底('on_green')
  • 黄色底('on_yellow')
  • 蓝色底('on_blue')
  • 紫色底('on_magenta')
  • 青色底('on_cyan')
  • 白色底('on_white')

二、相关问题

1、Python 使用pyinstaller打包后,print打印颜色乱码

问题描述:

Python 使用pyinstaller打包后,print打印颜色乱码,如图:

代码如下,直接运行是正常的,使用pyinstaller打包后运行乱码

class bcolors:
    OKRED = '\033[1;31m'
    END = '\033[0m'

print(bcolors.OKRED+'红色字体'+bcolors.OKRED)

解决办法:

添加如下代码即可。

import colorama
 
colorama.init(autoreset=True)




参考文章:
python打包exe指南_PyInstaller打包教程
python用print输出不同颜色字体
详解Python如何实现输出颜色字体到终端界面
Python 使用pyinstaller打包后,print打印颜色乱码

posted @ 2023-07-04 11:38  成理随风  阅读(1479)  评论(0)    收藏  举报