使用PyInstaller创建Python可执行文件
off999 2024-10-09 13:53 16 浏览 0 评论
您已经花费时间创建了一个 Python 应用程序,您希望使用它或将其分发。
译自 How to Create a Python Executable File With PyInstaller,作者 Jack Wallen。
您已经花费时间创建了一个 Python 应用程序,您希望使用它或将其分发给可以从其强大功能中受益的人。您可能认为唯一的方法是将代码发送给他们,确保他们在机器上安装了 Python(以及代码所需的任何依赖项),并指示他们使用命令 python3 appname.py 运行代码。
当然,这可以工作,但并不高效。如果您与可能不太了解 Python 的人共享应用程序,这可能会很麻烦。或者,即使他们了解 Python,您肯定也不希望将代码发送给他们并期望他们从命令行运行它。
相反,为什么不从您的 Python 代码 创建一个可执行文件,这样用户只需双击它即可运行应用程序,或者将文件复制到其 $PATH 中的目录并从文件系统层次结构中的任何位置运行命令。
这就是我今天要向您展示如何做的事情。我们将使用我们之前创建的 Python 应用程序的代码(用于获取用户的输入并使用 GUI 将其写入文件)并从中创建一个方便的可执行文件。
这是一种从 Python 代码创建便携式应用程序的好方法。目标机器唯一的要求是安装 Python(这是一个相当容易克服的障碍)。
好的,让我们开始吧。
您需要什么
要使此方法有效,您需要一台安装了 Python 的机器以及我们上次创建的示例代码。我会在这里添加代码,这样您就不必搜索它。我将在 Ubuntu 22.04 上演示此方法,但该过程适用于任何 Linux 发行版(或任何支持 Python 的操作系统)。如果您使用的是其他发行版或操作系统,则需要相应地调整 Pip 安装过程。
安装 Pip
要安装 PyInstaller,您必须首先确保安装了 Pip(Python 包管理器)。您可以使用以下命令检查 Pip 是否已安装:
如果您在控制台中看到版本号,则说明您已准备好。如果您收到错误,则需要安装 Pip,这可以通过以下命令完成:
sudo apt-get install python3-pip -y
当上述命令完成后,您就可以继续了。
接下来,我们需要安装 PyInstaller,它会读取您的 Python 代码,发现您的应用程序运行所需的每个模块和库,收集所有必要的东西(包括 Python 解释器),并将它们与您的代码组合成一个单独的文件夹或一个单独的可执行文件。
要安装 PyInstaller,请执行以下命令:
就是这样。您已准备好。
将所有内容捆绑在一起
我将首先向您展示如何使用 PyInstaller 为您的应用程序创建捆绑包。所有这些都将包含在一个文件夹中,其中包含一个可执行文件和一个包含依赖项的文件夹。
请记住,我们用于输入 GUI 的代码如下所示:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout
class UserInputApp(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('User Input App')
self.setGeometry(100, 100, 400, 200)
self.label = QLabel('Enter text:')
self.text_input = QLineEdit()
self.save_button = QPushButton('Save to File')
self.save_button.clicked.connect(self.save_to_file)
layout = QVBoxLayout()
layout.addWidget(self.label)
layout.addWidget(self.text_input)
layout.addWidget(self.save_button)
self.setLayout(layout)
def save_to_file(self):
text = self.text_input.text()
with open('user_input.txt', 'a+') as file:
file.write(text + '\n')
print('Text saved to file.')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = UserInputApp()
window.show()
sys.exit(app.exec_())
让我们使用以下命令创建一个新目录:
使用以下命令更改到该目录:
使用以下命令创建 Python 文件:
将上面的代码粘贴到该文件中,然后保存/关闭它。然后,您可以使用以下命令创建捆绑文件夹:
当命令完成后,使用以下命令更改到 dist 目录:
在这个文件夹中,你会找到一个名为 input 的子文件夹,其中包含可执行文件,以及一个名为 _internal 的文件夹。使用 cd input 命令进入 input 文件夹,然后你可以使用以下命令运行你的应用程序:
./input
输入 GUI 将会打开,你可以使用该应用程序。
如果你想以这种方式分发应用程序,你需要将 INPUT_APP/dist/input 文件夹复制给任何需要它的人,他们就可以像你一样运行它(只要他们的机器上安装了 Python)。
有一个更简单的方法。
创建单个文件可执行文件
最好的方法是使用 PyInstaller 创建单个文件可执行文件。这里唯一的区别是你在(INPUT_APP 文件夹内)运行的命令,它是:
pyinstaller –noconsole –onefile input.py
–noconsole 选项指示 PyInstaller 抑制应用程序启动时不可避免地打开的终端窗口,而 –onefile 则告诉 PyInstaller 创建单个文件可执行文件。
当此命令完成时,你将在 dist/input 目录中找到单个文件可执行文件。然后,你可以将该文件复制到你的 $PATH 中的目录(例如 /usr/local/bin)或复制给任何需要该应用程序的人。
这就是从 Python 代码创建可执行文件的所有步骤。使用这种便捷的方法,你的应用程序不仅更容易运行,而且更容易分发给其他用户。
相关推荐
- 如何理解python中面向对象的类属性和实例属性?
-
类属性和实例属性类属性就是给类对象中定义的属性通常用来记录与这个类相关的特征类属性不会用于记录具体对象的特征类属性的理解:类属性是与类自身相关联的变量,而不是与类的实例关联。它们通...
- Java程序员,一周Python入门:面向对象(OOP) 对比学习
-
Java和Python都是**面向对象编程(OOP)**语言,无非是类、对象、继承、封装、多态。下面我们来一一对比两者的OOP特性。1.类和对象Java和Python都支持面向对象...
- 松勤技术精选:Python面向对象魔术方法
-
什么是魔术方法相信大家在使用python的过程中经常会看到一些双下划线开头,双下划线结尾的方法,我们把它统称为魔术方法魔术方法的特征魔术方法都是双下划线开头,双下划线结尾的方法魔术方法都是pytho...
- [2]Python面向对象-【3】方法(python3 面向对象)
-
方法的概念在Python中,方法是与对象相关联的函数。方法可以访问对象的属性,并且可以通过修改对象的属性来改变对象的状态。方法定义在类中,可以被该类的所有对象共享。方法也可以被继承并重载。方法的语法如...
- 一文带你理解python的面向对象编程(OOP)
-
面向对象编程(OOP,Object-OrientedProgramming)是一个较难掌握的概念,而Python作为一门面向对象的语言,在学习其OOP特性时,许多人都会对“继承”和“多态”等...
- 简单学Python——面向对象1(编写一个简单的类)
-
Python是一种面向对象的编程语言(ObjectOrientedProgramming),在Python中所有的数据类型都是对象。在Python中,也可以自创对象。什么是类呢?类(Class)是...
- python进阶突破面向对象——四大支柱
-
面向对象编程(OOP)有四大基本特性,通常被称为"四大支柱":封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)和抽象(Abstrac...
- Python学不会来打我(51)面向对象编程“封装”思想详解
-
在面向对象编程(Object-OrientedProgramming,简称OOP)中,“封装(Encapsulation)”是四大核心特性之一(另外三个是继承、多态和抽象),它通过将数据(属性)和...
- Python之面向对象:对象属性解析:MRO不够用,补充3个方法
-
引言在前面的文章中,我们谈及Python在继承关系,尤其是多继承中,一个对象的属性的查找解析顺序。由于当时的语境聚焦于继承关系,所以只是简要提及了属性解析顺序同方法的解析顺序,而方法的解析顺序,在Py...
- Python之面向对象:通过property兼顾属性的动态保护与兼容性
-
引言前面的文章中我们简要提及过关于Python中私有属性的使用与内部“名称混淆”的实现机制,所以,访问私有属性的方法至少有3种做法:1、使用实例对象点操作符的方式,直接访问名称混淆后的真实属性名。2、...
- Python之面向对象:私有属性是掩耳盗铃还是恰到好处
-
引言声明,今天的文章中没有一行Python代码,更多的是对编程语言设计理念的思考。上一篇文章中介绍了关于Python面向对象封装特性的私有属性的相关内容,提到了Python中关于私有属性的实现是通过“...
- Python中的私有属性与方法:解锁面向对象编程的秘密
-
Python中的私有属性与方法:解锁面向对象编程的秘密在Python的广阔世界里,面向对象编程(OOP)是一种强大而灵活的方法论,它帮助我们更好地组织代码、管理状态,并构建可复用的软件组件。而在这个框...
- Python 面向对象:掌握类的继承与组合,让你的代码更高效!
-
引言:构建高效代码的基石Python以其简洁强大的特性,成为众多开发者首选的编程语言。而在Python的面向对象编程(OOP)范畴中,类的继承和组合无疑是两大核心概念。它们不仅能帮助我们实现代码复用,...
- python进阶-Day2: 面向对象编程 (OOP)
-
以下是为Python进阶Day2设计的学习任务,专注于面向对象编程(OOP)的核心概念和高阶特性。代码中包含详细注释,帮助理解每个部分的实现和目的。任务目标:复习OOP基础:类、对象、继...
- 外婆都能学会的Python教程(二十八):Python面向对象编程(二)
-
前言Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行。下面是Python的入门教程介绍...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python重命名文件 (54)
- python面向对象编程 (60)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)