网站内做关键词连接/百度收录查询网址
使用PyInstaller打包自己写好的代码
零、需求
最近接到一个小单,需要批量修改文档内容,用Python做好后要打包成exe程序给客户的Win7电脑使用,此时需要用到PyInstaller打包自己的代码,想到还要有给用户试用的需求,所以还要加密打包。这里介绍一下如何打包并“加密”自己的Python程序。
壹、使用PyInstaller打包程序
建议:用Python开发程序时使用虚拟环境,打包也在虚拟环境中打包,这样减少项目之间的耦合性,方便管理。
一、安装PyInstaller
安装之前建议把pip的源改为国内的,这样安装速度快很多,具体怎样更改这边不再赘述,安装pyinstaller命令如下(目前是2023年10月,我安装的是PyInstaller 6.0的版本):
pip install pyinstaller
安装过程如下:
(venv) PS D:\project\modify_docx_xlsx_left_header> pip install pyinstaller
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting pyinstallerDownloading http://mirrors.aliyun.com/pypi/packages/a5/85/ddb59556f67ff274dd08201f0644a1715f245abc2d8b2faab7bd4e71b82d/pyinstaller-6.0.0-py3-none-win_amd64.whl (1.3 MB)---------------------------------------- 1.3/1.3 MB 1.1 MB/s eta 0:00:00
Collecting pywin32-ctypes>=0.2.1Downloading http://mirrors.aliyun.com/pypi/packages/a4/bc/78b2c00cc64c31dbb3be42a0e8600bcebc123ad338c3b714754d668c7c2d/pywin32_ctypes-0.2.2-py3-none-any.whl (30 kB)
Collecting importlib-metadata>=4.6Downloading http://mirrors.aliyun.com/pypi/packages/cc/37/db7ba97e676af155f5fcb1a35466f446eadc9104e25b83366e8088c9c926/importlib_metadata-6.8.0-py3-none-any.whl (22 kB)
Collecting pyinstaller-hooks-contrib>=2021.4Downloading http://mirrors.aliyun.com/pypi/packages/66/6b/d1e3b2c8d306694d2d95c4886aa3057c6ca680a759700ae924de84c488bc/pyinstaller_hooks_contrib-2023.9-py2.py3-none-any.whl (284 kB)---------------------------------------- 284.9/284.9 kB 2.9 MB/s eta 0:00:00
Collecting pefile>=2022.5.30Downloading http://mirrors.aliyun.com/pypi/packages/55/26/d0ad8b448476d0a1e8d3ea5622dc77b916db84c6aa3cb1e1c0965af948fc/pefile-2023.2.7-py3-none-any.whl (71 kB)---------------------------------------- 71.8/71.8 kB 232.3 kB/s eta 0:00:00
Collecting altgraphDownloading http://mirrors.aliyun.com/pypi/packages/4d/3f/3bc3f1d83f6e4a7fcb834d3720544ca597590425be5ba9db032b2bf322a2/altgraph-0.17.4-py2.py3-none-any.whl (21 kB)
Requirement already satisfied: setuptools>=42.0.0 in d:\project\modify_docx_xlsx_left_header\venv\lib\site-packages (from pyinstaller) (65.5.1)
Collecting packaging>=20.0Downloading http://mirrors.aliyun.com/pypi/packages/ec/1a/610693ac4ee14fcdf2d9bf3c493370e4f2ef7ae2e19217d7a237ff42367d/packaging-23.2-py3-none-any.whl (53 kB)---------------------------------------- 53.0/53.0 kB 2.9 MB/s eta 0:00:00
Collecting zipp>=0.5Downloading http://mirrors.aliyun.com/pypi/packages/d9/66/48866fc6b158c81cc2bfecc04c480f105c6040e8b077bc54c634b4a67926/zipp-3.17.0-py3-none-any.whl (7.4 kB)
Installing collected packages: altgraph, zipp, pywin32-ctypes, pyinstaller-hooks-contrib, pefile, packaging, importlib-metadata, pyinstaller
Successfully installed altgraph-0.17.4 importlib-metadata-6.8.0 packaging-23.2 pefile-2023.2.7 pyinstaller-6.0.0 pyinstaller-hooks-contrib-2023.9 pywin32-ctypes-0.2.2 zipp-3.17.0
WARNING: There was an error checking the latest version of pip.
(venv) PS D:\project\modify_docx_xlsx_left_header>
出现Successfully installed pyinstaller
即安装成功。安装成功后建议把命令行程序关掉,然后重新打开,重新载入一下环境。
若是成功安装PyInstaller,在命令行程序中执行pyinstaller
命令即可看到PyInstaller的帮助信息:
(venv) PS D:\project\modify_docx_xlsx_left_header> pyinstaller
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--contents-directory CONTENTS_DIRECTORY] [--add-data SOURCE:DEST] [--add-binary SOURCE:DEST] [-p DIR] [--hidden-import MODULENAME] [--collect-submodules MODULENAME] [--collect-data MODULENAME][--collect-binaries MODULENAME] [--collect-all MODULENAME] [--copy-metadata PACKAGENAME] [--recursive-copy-metadata PACKAGENAME] [--additional-hooks-dir HOOKSPATH] [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES] [--splash IMAGE_FILE][-d {all,imports,bootloader,noarchive}] [--python-option PYTHON_OPTION] [-s] [--noupx] [--upx-exclude FILE] [-c] [-w] [--hide-console {hide-late,minimize-early,minimize-late,hide-early}] [-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">][--disable-windowed-traceback] [--version-file FILE] [-m <FILE or XML>] [-r RESOURCE] [--uac-admin] [--uac-uiaccess] [--argv-emulation] [--osx-bundle-identifier BUNDLE_IDENTIFIER] [--target-architecture ARCH] [--codesign-identity IDENTITY][--osx-entitlements-file FILENAME] [--runtime-tmpdir PATH] [--bootloader-ignore-signals] [--distpath DIR] [--workpath WORKPATH] [-y] [--upx-dir UPX_DIR] [--clean] [--log-level LEVEL]scriptname [scriptname ...]
pyinstaller: error: the following arguments are required: scriptname
(venv) PS D:\project\modify_docx_xlsx_left_header>
二、PyInstaller参数
主要参数如下:
参数 | 说明 |
---|---|
–distpath 目录 | 应用程序包的存放位置(默认值:./dist) |
–workpath 工作路径 | 所有临时文件(.log和.pyz等)的存放位置(默认值:./build) |
-D, --onedir | 创建一个包含可执行文件的单文件夹捆绑包,也就是打包成多个文件,适合以框架的形式编写工具代码,代码易于维护。(默认) |
-F, --onefile | 打包成一个可执行文件,所有代码打包进一个文件中,方便分发使用。 |
-n 名字, --name 名字 | 程序包和配置文件的名称(默认值:第一个脚本的名称,不含后缀) |
–contents-directory 内容目录 | 仅对于onedir构建(多文件打包)有效,指定所有支持文件(即除可执行文件本身之外的所有文件,依赖文件)将放置在其中的目录的名称。 |
–add-data SOURCE:DEST | 包含要添加到应用程序的数据文件的其他数据文件或目录。参数值应采用“source:dest_dir”的形式,其中source是要收集的文件(或目录)的路径,dest_dir是相对于顶级应用程序目录的目标目录,两个路径都用冒号(:)分隔。要将文件放在顶级应用程序目录中,请使用(.)作为dest_dir。此选项可以多次使用。 |
–add-binary SOURCE:DEST | 要添加到可执行文件中的其他二进制文件。请参见–add-data格式选项。此选项可以多次使用 |
-p 目录, --paths 目录 | 搜索导入的路径(比如使用PYTHONPATH)。允许使用多个路径、由分隔或多次使用此选项。相当于在配置文件中提供参数。“:”pathex |
–hidden-import 模块名称, --hiddenimport 模块名称 | 在脚本代码中不可见的模块名称导入。此选项可以多次使用。 |
-w, --windowed, --noconsole | Windows和Mac OS X:不提供标准i/o的控制台窗口。在Mac操作系统上,这也会触发构建MacOS.app捆绑包。在Windows上,如果第一个脚本是“.pyw”文件,则会自动设置此选项。此选项在*NIX系统上被忽略。 |
-i <ico文件、exe文件,编号、icns文件、图片、“NONE”>, --icon <ico文件、exe文件,编号、icns文件、图片、“NONE”> | ico文件:将图标应用于Windows可执行文件。exe文件,编号:从exe中提取对应编号的图标。icns文件:将图标应用于Mac OS上的.app捆绑包。如果输入的图像文件不是平台格式(Windows上为ico,Mac上为icns),PyInstaller会尝试使用Pillow将图标转换为正确的格式(如果安装了Pillow)。使用“NONE”不应用任何图标,从而使操作系统显示一些默认值(默认值:应用PyInstaller的图标)。此选项可以多次使用。 |
其他相关参数可以参考PyInstaller官网文档:PyInstaller参数说明。我们待会儿打包程序使用到的最多就是上面这些参数。
三、基本程序打包
因为我程序相对来讲比较小,不需要过多的依赖文件,故选择打成单文件包,打包成多文件一样的操作,就把参数-F
改为-D
即可。
我的程序目录如下:
MODIFY_DOCX_XLSX_LEFT_HEADER
│ app.py
│ config.py
│ gui.py
│ log.py
│ run.py
│
└─imagesicon.ico
其中run.py
是入口文件。
使用如下命令将项目中所有代码打包成单文件:
pyinstaller -F run.py
打包过程如下:
(venv) PS D:\project\modify_docx_xlsx_left_header> pyinstaller -F run.py
608 INFO: PyInstaller: 6.0.0
608 INFO: Python: 3.8.10
624 INFO: Platform: Windows-7-6.1.7601-SP1
624 INFO: wrote D:\project\modify_docx_xlsx_left_header\run.spec
639 INFO: Extending PYTHONPATH with paths
['D:\\project\\modify_docx_xlsx_left_header']
1154 INFO: checking Analysis
1154 INFO: Building Analysis because Analysis-00.toc is non existent
1154 INFO: Initializing module dependency graph...
1170 INFO: Caching module graph hooks...
1185 INFO: Analyzing base_library.zip ...
2854 INFO: Loading module hook 'hook-heapq.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
3120 INFO: Loading module hook 'hook-encodings.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
5226 INFO: Loading module hook 'hook-pickle.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
6427 INFO: Caching module dependency graph...
6614 INFO: Running Analysis Analysis-00.toc
6614 INFO: Looking for Python shared library...
6676 INFO: Using Python shared library: C:\Program Files\Python38\python38.dll
6676 INFO: Analyzing D:\project\modify_docx_xlsx_left_header\run.py
7800 INFO: Loading module hook 'hook-charset_normalizer.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks'...
8205 INFO: Loading module hook 'hook-certifi.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks'...
8377 INFO: Loading module hook 'hook-docx.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks'...
8548 INFO: Loading module hook 'hook-lxml.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks'...
9859 INFO: Loading module hook 'hook-openpyxl.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks'...
10545 INFO: Loading module hook 'hook-xml.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
10561 INFO: Loading module hook 'hook-xml.etree.cElementTree.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
11606 INFO: Processing module hooks...
11622 INFO: Loading module hook 'hook-lxml.etree.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks'...
11746 INFO: Loading module hook 'hook-difflib.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
12012 INFO: Loading module hook 'hook-platform.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
12043 INFO: Loading module hook 'hook-sysconfig.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
12542 INFO: Loading module hook 'hook-multiprocessing.util.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
13603 INFO: Loading module hook 'hook-lxml.isoschematron.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks'...
13665 INFO: Loading module hook 'hook-_tkinter.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks'...
13681 INFO: checking Tree
13681 INFO: Building Tree because Tree-00.toc is non existent
13681 INFO: Building Tree Tree-00.toc
13743 INFO: checking Tree
13743 INFO: Building Tree because Tree-01.toc is non existent
13743 INFO: Building Tree Tree-01.toc
13759 INFO: checking Tree
13759 INFO: Building Tree because Tree-02.toc is non existent
13759 INFO: Building Tree Tree-02.toc
13759 INFO: Loading module hook 'hook-lxml.objectify.py' from 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks'...
14851 INFO: Looking for ctypes DLLs
14851 INFO: Analyzing run-time hooks ...
14851 INFO: Including run-time hook 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth__tkinter.py'
14866 INFO: Including run-time hook 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py'
14866 INFO: Including run-time hook 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_pkgutil.py'
14866 INFO: Including run-time hook 'D:\\project\\modify_docx_xlsx_left_header\\venv\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py'
15007 INFO: Looking for dynamic libraries
16738 INFO: Extra DLL search directories (AddDllDirectory): []
16738 INFO: Extra DLL search directories (PATH): []
18267 INFO: Warnings written to D:\project\modify_docx_xlsx_left_header\build\run\warn-run.txt
18408 INFO: Graph cross-reference written to D:\project\modify_docx_xlsx_left_header\build\run\xref-run.html
18470 INFO: checking PYZ
18470 INFO: Building PYZ because PYZ-00.toc is non existent
18470 INFO: Building PYZ (ZlibArchive) D:\project\modify_docx_xlsx_left_header\build\run\PYZ-00.pyz
19827 INFO: Building PYZ (ZlibArchive) D:\project\modify_docx_xlsx_left_header\build\run\PYZ-00.pyz completed successfully.
20046 INFO: checking PKG
20046 INFO: Building PKG because PKG-00.toc is non existent
20046 INFO: Building PKG (CArchive) run.pkg
26739 INFO: Building PKG (CArchive) run.pkg completed successfully.
26770 INFO: Bootloader D:\project\modify_docx_xlsx_left_header\venv\lib\site-packages\PyInstaller\bootloader\Windows-64bit-intel\run.exe
26770 INFO: checking EXE
26770 INFO: Building EXE because EXE-00.toc is non existent
26770 INFO: Building EXE from EXE-00.toc
26770 INFO: Copying bootloader EXE to D:\project\modify_docx_xlsx_left_header\dist\run.exe
26786 INFO: Copying icon to EXE
26801 INFO: Copying 0 resources to EXE
26801 INFO: Embedding manifest in EXE
26801 INFO: Appending PKG archive to EXE
26879 INFO: Fixing EXE headers
27379 INFO: Building EXE from EXE-00.toc completed successfully.
(venv) PS D:\project\modify_docx_xlsx_left_header>
打包完成后在项目目录下生成了一个配置文件run.spec
、一个输出目录dist
和一个临时缓存目录build
,其中打包好的可执行文件在输出目录dist
中,没有特别指定名字,则是根据打包的脚本名命名的,我的为run.exe
。
四、资源打包
尝试运行run.exe
,很遗憾,报错了,在弹出的一闪而过的控制台中可以看出,是图片资源找不到了:
我们需要把资源打包进来。
这需要在刚刚生成的配置文件中修改,或者使用--add-data
参数(其实本质也是修改了配置文件),我使用参数的方式添加打包资源,使用如下命令:
pyinstaller -F run.py --add-data 'images/*:images'
根据上面参数的介绍,这个命令的意思是在将以run.py
为入口的Python程序打成单个可执行文件的同时把目前相对位置为images
文件夹下的所有文件嵌入到在执行时相对位置为images
的文件夹中。要是有更多的资源文件夹或文件可以在后面继续添加--add-data
参数。
但是这样还不行,还是提示文件找不到,经过了解,我们代码运行时的相对路径是以可执行文件位置作为起始地址的,而单个的可执行文件在运行前会把相关内容解压到电脑的缓存目录中,这样的话资源文件的位置就跟可执行文件位置不一样,从而找不到资源文件。还好,PyInstaller给我们提供了一个环境变量(PyInstaller官方文档 - 运行时信息),我们可以通过这个环境变量找到资源文件的位置,代码如下:
def get_res(file_path):import osimport sysif hasattr(sys, '_MEIPASS'):return os.path.join(getattr(sys, '_MEIPASS'), file_path)return file_path
通过这个函数获取到文件位置,然后再使用。
例如:
可以把
with open('res/a.txt', 'r', encoding='utf-8') as f:txt = f.read()
改写成
with open(get_res('res/a.txt'), 'r', encoding='utf-8') as f:txt = f.read()
这样就不会报错了。
注意:打包前需要把上次打包好的程序关掉,否则覆盖不了。
五、关闭控制台
发现序运行时会顺带开启一个控制台窗口,但是我的是图形化界面,不需要显示额外的控制台界面来调试。
使用-w
参数关掉控制台:
pyinstaller -F run.py -w
合并参数如下:
pyinstaller -F run.py --add-data 'images/*:images' -w
重新打包后没有控制台界面了。
六、修改图标
我对默认的应用程序图标不太满意,我想使用我自己的图标,图标是项目的images文件夹
下的icon.ico
文件,可以使用-i
参数指定可执行文件的图标:
pyinstaller -F run.py -i 'images/icon.ico'
-i
后面跟着的是图标的路径,可以使用相对路径,也可以使用绝对路径。
合并参数如下:
pyinstaller -F run.py --add-data 'images/*:images' -w -i 'images/icon.ico'
运行此命令重新生成可执行文件后修改成功:
到这里,基本的打包需求就都满足了。
贰、使用CPython配合加密打包程序
参考资料
- 【python第三方库】pyinstaller使用教程及spec资源文件介绍
- pyinstaller打包python应用之方法(含打包图片资源)
- python 将资源文件打包进exe
- 谈谈 Pyinstaller 的编译和反编译,如何保护你的代码
- VS2015安装包-下载
- pip错误“Microsoft Visual C++ 14.0 is required.”解决办法
- Remove the --key/cipher bytecode encryption. #6999
- Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本
- Cython+Pyinstaller Python编译与打包-踩坑
- Oxyry Python Obfuscator
- python反编译 - 在线工具
- PyInstaller 官方文档
相关文章:

【Python】如何使用PyInstaller打包自己写好的代码
使用PyInstaller打包自己写好的代码 零、需求 最近接到一个小单,需要批量修改文档内容,用Python做好后要打包成exe程序给客户的Win7电脑使用,此时需要用到PyInstaller打包自己的代码,想到还要有给用户试用的需求,所以…...

Java 线程的调度与时间片
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...

Java项目-文件搜索工具
目录 项目背景 项目效果 SQLite的下载安装 使用JDBC操作SQLite 第三方库pinyin4j pinyin4j的具体使用 封装pinyin4j 数据库的设计 创建实体类 实现DBUtil 封装FileDao 设计scan方法 多线程扫描 周期性扫描 控制台版本的客户端 图形化界面 设计图形化界面 项目…...

记录开发中遇到关于MySQL的一些问题-MySQL版
本篇文章是记录开发中遇到关于MySQL的一些问题: 希望在这篇文章也能够找到你正在查找的问题,解决问题 Good Luck ! 关于Id 的一些问题 数据库并没有直接写SQL,是通过使用IDEA 同一个公司下的数据库软件生成的(DataGrip…...

2023-10-06 LeetCode每日一题(买卖股票的最佳时机含手续费)
2023-10-06每日一题 一、题目编号 714. 买卖股票的最佳时机含手续费二、题目链接 点击跳转到题目位置 三、题目描述 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。 你可以无限次地完成交易&…...

openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT外部支持工具
文章目录 openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT外部支持工具91.1 gs_ctl(全量和增量)91.2 gs_basebackup91.3 gs_dump91.4 gs_restore openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT…...

PostgreSQL快速入门
PostgreSQL快速入门:轻松掌握强大的开源数据库 PostgreSQL(简称Postgres)是一款强大、可定制且免费的开源关系型数据库管理系统(RDBMS)。它以其高级功能、可扩展性和安全性而著称,被广泛用于各种规模的项目…...

MATLAB:线性系统的建模与仿真(含完整程序)
目录 前言实验内容一、先看作业题目要求二、作业正文Modeling LTI systemsEstablish model1.tf(sys2)2. tf(sys3)3.zpk(sys1)4. zpk(sys3)5. ss(sys1)6. ss(sys2)7.[num,den] tfdata(sys1)8.[num,den] tfdata(sys2)9.[num,den] tfdata(sys3)10.[num,den] tfdata(sys1,’v’…...

mycat实现mysql读写分离
架构图: 视频地址...

【C++】STL详解(十一)—— unordered_set、unordered_map的介绍及使用
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C学习 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C】STL…...

【C语言】动态通讯录(超详细)
通讯录是一个可以很好锻炼我们对结构体的使用,加深对结构体的理解,在为以后学习数据结构打下结实的基础 这里我们想设计一个有添加联系人,删除联系人,查找联系人,修改联系人,展示联系人,排序这几…...

Mac下docker安装MySQL8.0.34
学习并记录一下如何用docker部署MySQL 在Docker中搜索并下载MySQL8.0.x的最新版本 下载好后,在Images中就可以看到MySQL的镜像了 通过下面的命令也可以查看docker images启动镜像,使用下面的命令就可以启动镜像了docker run -itd --name mysql8.0.34 -…...

基于python编写的excel表格数据标记的exe文件
目录 一、需求: 二、思路: 三、工具 四、设计过程 (一)根据需要导入相关的图形界面库 (二)创建图形窗口 (三)标签设计 (四)方法按钮设计 ࿰…...

acwing算法基础之基础算法--高精度加法算法
目录 1 知识点2 模板 1 知识点 大整数 大整数,它们的长度都为 1 0 6 10^6 106。大整数是指长度为 1 0 6 10^6 106的整数。 大整数 - 大整数 大整数 * 小整数 大整数 / 小整数 把大整数存储到向量中,需要考虑高位在前还是低位在前,低位在前…...

openGauss学习笔记-84 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署服务器优化:x86
文章目录 openGauss学习笔记-84 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署服务器优化:x8684.1 BIOS84.2 操作系统环境设置84.3 网络 openGauss学习笔记-84 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署服务器优化:x86 …...

二分查找:34. 在排序数组中查找元素的第一个和最后一个位置
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《算法》 文章目录 前言一、题目解析二、解题思路1. 暴力查找2. 一次二分查找 部分遍历3. 两次二分查找分别查找左右端点1.查找区间左端点2. 查找区间右端点 三、代码实现总结 前言 本篇文…...

javaee ssm框架项目整合thymeleaf2.0 更多thymeleaf标签用法 项目结构图
创建ssmthymeleaf项目 创建ssmthymeleaf项目参考此文 thymeleaf更多常用标签 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"> <head><meta charset"UTF-8"><title>Title</title> …...

lv7 嵌入式开发-网络编程开发 11 TCP管理与UDP协议
目录 1 TCP管理 1.1 三次握手 1.2 四次挥手 1.3 保活计时器 2 wireshark安装及实验 3.1 icmp协议抓包演示 3.2 tcp协议抓包演示 3 UDP协议 3.1 UDP 的主要特点: 4 练习 1 TCP管理 1.1 三次握手 TCP 建立连接的过程叫做握手。 采用三报文握手࿱…...

overleaf在线编辑工具使用教程
文章目录 1 用 orcid注册overleaf获取模板2 使用模板 1 用 orcid注册overleaf获取模板 通常来说,在期刊投稿网站information for author中找template 。下载压缩包后上传到over leaf中。 加入找不到官方模板,用overleaf中的 2 使用模板 .bib文件&…...

Python基础复习【第一弹】【黑马】
本篇是观看b站黑马视频所做的笔记第一弹,为1-98节。 b站-黑马Python # 1.Hello World print("Hello World")# 2.字面量 在代码中,被写下来固定的值# 3.字符串 print("python")# 4.单行注释 # 多行注释""" "&q…...

【Word】公式编辑器中连字符/减号等显示偏长/过长
问题 当公式编辑器中出现连字符的时候,连字符显示偏长,如下图所示: 方法 在连字符的前后加上双引号后即可解决连字符显示偏长的问题。 最终效果对比如下: 结语 Word的公式编辑器中,双引号内部的内容被当做普通…...

架构设计系列4:如何设计高性能架构
在架构设计系列1:什么是架构设计中,我们讲了架构设计的主要目的,是为了解决软件系统复杂度带来的问题,今天我们来聊聊软件系统复杂度的来源之一高性能。 一、什么是高性能架构? 要搞清楚什么是高性能架构,…...

1392. 最长快乐前缀
链接: 1392. 最长快乐前缀 题解: class Solution { public:string longestPrefix(string s) {if (s.size() < 0) {return "";}int MOD 1e9 7;// 构建26的n次方,预处理std::vector<long> pow26(s.size());pow26[0] 1…...

【C++设计模式之备忘录模式:行为型】分析及示例
简介 备忘录模式(Memento Pattern)是一种行为型设计模式,它用于保存和恢复对象的状态。备忘录模式通过将对象的状态封装成一个备忘录(Memento),并将备忘录保存在一个管理者(Caretakerÿ…...

数据结构与算法(四):哈希表
参考引用 Hello 算法 Github:hello-algo 1. 哈希表 1.1 哈希表概述 哈希表(hash table),又称散列表,其通过建立键 key 与值 value 之间的映射,实现高效的元素查询 具体而言,向哈希表输入一个键…...

FFmpeg 命令:从入门到精通 | ffplay 播放控制选项
FFmpeg 命令:从入门到精通 | ffplay 播放控制选项 FFmpeg 命令:从入门到精通 | ffplay 播放控制选项选项表格图片 FFmpeg 命令:从入门到精通 | ffplay 播放控制选项 选项表格 项目说明Q,Esc退出播放F,鼠标左键双击全…...

代码随想录day59
647. 回文子串 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成&#…...

【小工具-生成合并文件】使用python实现2个excel文件根据主键合并生成csv文件
1 小工具说明 1.1 功能说明 一般来说,我们会先有一个老的文件,这个文件内容是定制好相关列的表格,作为每天的报告。 当下一天来的时候,需要根据新的报表文件和昨天的报表文件做一个合并,合并的时候就会出现有些事新增…...

【论文阅读】An Evaluation of Concurrency Control with One Thousand Cores
An Evaluation of Concurrency Control with One Thousand Cores Staring into the Abyss: An Evaluation of Concurrency Control with One Thousand Cores ABSTRACT 随着多核处理器的发展,一个芯片可能有几十乃至上百个core。在数百个线程并行运行的情况下&…...

网页版”高德地图“如何设置默认城市?
问题: 每次打开网页版高德地图时默认定位的都是“北京”,想设置起始点为目前本人所在城市,烦恼的是高德地图默认的初始位置是北京。 解决: 目前网页版高德地图暂不支持设置起始点,打开默认都是北京,只能将…...