一步步教你将包含其他文件的 Python 脚本等打包成 EXE
off999 2024-09-16 00:53 42 浏览 0 评论
背景
最近我编写了一个Python脚本,该脚本需要依赖两个同级目录下的文件才能正常运行。然而,当我将脚本打包成EXE程序后,必须将这两个文件放在EXE文件的同级目录下才能正常执行。为了简化部署,我希望能将这两个文件一起打包到EXE文件中,这时候该怎么办呢?
解决方案
在这里,我选择使用PyInstaller将Python脚本及其依赖的文件打包成一个独立的EXE文件。PyInstaller不仅可以打包脚本,还可以打包所需的资源文件和依赖库。关于它的简单使用在之前的文章中有提到过:【Python】怎么把Python脚本打包成可执行程序?
1、安装 PyInstaller:
可以通过以下命令进行安装:
pip install pyinstaller2、项目结构:
我需要将python入口文件main.py和private_key.pem、public_key.pem打包成一个EXE文件,项目结构如下所示:
xiaodou-test/
│
├── main.py
├── public_key.pem
├── private_key.pem3、修改代码以适应打包后的结构
因为我原来的代码中的文件路径是相对路径,从程序所在目录读取文件,现在修改了打包方式之后,文件路径会有所变化,这时候需要修改代码以适应新的路径。可以使用sys._MEIPASS来获取临时目录路径。(以下参考代码在开发的时候也能从py文件所在路径下读到文件)
获取路径的代码如下:
import os
import sys
def resource_path(relative_path):
"""
获取资源的绝对路径,适用于开发环境和PyInstaller打包后的环境。
"""
try:
# PyInstaller创建临时文件夹,并将路径存储在_MEIPASS中
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
def create_temp_file(filename, content):
"""
在临时目录中创建一个文件,并写入指定内容。
参数:
filename (str): 要创建的文件名。
content (str): 要写入文件的内容。
返回:
str: 创建的文件的绝对路径。
"""
try:
# PyInstaller创建临时文件夹,并将路径存储在_MEIPASS中
temp_dir = sys._MEIPASS
except Exception:
temp_dir = os.path.abspath(".")
file_path = os.path.join(temp_dir, filename)
with open(file_path, 'w') as file:
file.write(content)
return file_path因为要做文件的输出,我这里就添加了一个临时目录创建的函数,不涉及的小伙伴,可以不用管这段代码。
main.py中读取文件的代码:
from resource_utils import resource_path, create_temp_file
def main():
private_key_path = resource_path('private_key.pem')
public_key_path = resource_path('public_key.pem')
print(f"Private key path: {private_key_path}")
print(f"Public key path: {public_key_path}")
# 读取文件内容
with open(private_key_path, 'r') as private_key_file:
private_key = private_key_file.read()
with open(public_key_path, 'r') as public_key_file:
public_key = public_key_file.read()
print("Private Key:", private_key)
print("Public Key:", public_key)
# 在临时目录中创建一个新的文件并写入内容
new_file_path = create_temp_file('license.txt', 'This is xiaodou license.')
print(f"New file created at: {new_file_path}")
if __name__ == '__main__':
main()4、使用PyInstaller打包
使用PyInstaller的--add-data选项来将外部文件打包进EXE文件中。步骤如下:
- 打开终端或命令提示符,导航到项目目录。
- 执行以下命令打包脚本:
pyinstaller --onefile --add-data "private_key.pem:." --add-data "public_key.pem:." main.py- --onefile 选项表示将所有内容打包成一个独立的EXE文件。
- --add-data 选项用于指定要打包的外部文件。格式为"source_path;destination_path",其中source_path是文件的路径,destination_path是文件在EXE中的路径。
其他可以使用的参数:
- --noconsole选项,它会告诉PyInstaller在Windows上创建一个窗体应用程序而不是控制台应用程序。这样就不会显示命令行窗口。
- --icon 选项指定图标文件,这个图标将用于生成的可执行文件的显示图标和窗口图标。
原文链接:https://juejin.cn/post/7374668941652590618
相关推荐
-
- cad2014破解版激活教程(cad 2014破解版怎么样激活)
-
步骤如下:1.打开CAD2014,点击激活,勾选同意协议之后它会告诉您,您的序列号是错误的,这时点击关闭等一会再点击激活即可;2.在激活界面中选择“我拥有一个Autodesk激活码”;3.启动对应版本的XFORCEKeygen32bit...
-
2026-02-03 15:51 off999
- electricity(electricity翻译)
-
electricity[英][??lek?tr?s?ti][美][?l?k?tr?s?ti,?il?k-]n.电力;电流,静电;高涨的情绪;紧张;以上结果来自金山词霸例句:1.Article31pow...
- 腾讯游戏实名认证中心官网(腾讯游戏实名认证官网首页)
-
QQ游戏实名注册和防沉迷系统设置方法:第一步:登录实名注册和防沉迷系统网站(http://jkyx.qq.com/web2010/authoriz.htm);第二步:填写实名制信息;第三步:等待审核,...
- qlv文件怎么转换成mp4(qlv文件怎么转换成mp4格式)
-
要将QLV文件转换为MP4文件,您可以使用专业的视频转换软件。首先,下载并安装一个可靠的视频转换器,如Handbrake或AnyVideoConverter。然后,打开软件并导入您要转换的QLV文...
- 央视网cctv5直播(央视网cctv5直播在线观看)
-
看CCTV5直播可以直接选择网页看直播或者使用播放器看直播频道。1、打开e网站2、打开我打圈的,电视直播,但是这里面有些台没有,比如浙江卫视3、然后在左边可以选择你想看的台4、方法2,打开网络主流播放...
- qq历史版本官方下载(qq历史旧版本大全)
-
蟹妖。我用的小米手机,可以双开两个应用,你可以搞两个一样版本的qq。小米手机,还可以手机分身,一个手机不同的解锁方式进入不同的系统,第一个系统你可以安最新版本的qq,另一个系统你可以安装其他版...
- 一个人看的片免费高清大全(一个人看的片免费高清大全在线观看)
-
推荐“爱奇艺App手机版”。它是百度旗下的高清电影站,有许多最新最热的正版大片供免费观看,爱奇艺APP是一款集视频、商城、购票、阅读、直播、泡泡粉丝社区等多种服务于一体的移动软件。爱奇艺手机版为用户提...
- 搜狗翻译app下载(搜狗翻译app下载安装)
-
有啊,点击输入框弹出搜狗键盘,进入搜狗工具栏最左边的图标,进入加号,添加中英互译。1、首先确认是否电脑键盘按键出现问题,可以通过win+r调出运行,输入osk。2、调出虚拟键盘测试虚拟键盘是否可以正常...
- 女生付费和男生聊天(女生找男生聊天掉价吗)
-
不管在什么情况下女生好像都处在优势,因为只听说过娶不到媳妇儿的单身汉,还没有听说过嫁不出去的丑媳妇儿。所以一般这种交友聊天软件就是奔着让男人出钱来的,而且这类软件骗子太多,几乎都是机器人,或者是各种托...
- 腾讯公司版权所有(腾讯开放版权)
-
你好!其实这个很好理解,就是版权公司把这个音乐的管理、销售权限(独家版权)授权给了腾讯,腾讯可以把音乐对外进行转授权。所以你看有一些腾讯独家版权的歌,为什么其他音乐平也台会有呢?其实就是腾讯授予的。因...
- 智能语音机器人(智能语音机器人哪个最好)
-
1、小米的小爱小爱的智能应用随着近年来的不断升级,在很多手机应用都带来了智能新体验。像移动支付、生活购物、查询信息、打开应用等等,小爱智能语音识别就可以帮你解决。用户还可以自己创建快捷方式,进行语音交...
- adobe lightroom(adobe lightroom for ipad破解版)
-
adobelightroom是一款非常不错的在线教育软件,adobelinghtroom这款软件具有资源管理,资源共享,在线学习,在线考试,成绩管理,教学管控,教学互动,效果评估等等功能,可以为用户提...
- 解压软件免费(电脑解压软件免费)
-
WinRAR压缩软件winrar压缩软件界面友好,WINRAR现在最好的压缩工具。使用方便,压缩率和速度方面都有很好的表示。其压缩率比之WINZIP之流要高。winrar压缩软件采用了比Zip更...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
win7系统还原步骤图解(win7还原电脑系统的步骤)
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
16949认证费用是多少(16949审核员太难考了)
-
linux软件(linux软件图标)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
