一键整合,万用万灵,Python3.10项目嵌入式一键整合包的制作(Embed)
我们知道Python是一门解释型语言,项目运行时需要依赖Python解释器,并且有时候需要安装项目中对应的三方依赖库。对于专业的Python开发者来说,可以直接通过pip命令进行安装即可。但是如果是分发给其他的Windows用户,特别是不熟悉Python的人来说,这样过于繁琐。因此最好的办法是连同Python解释器和Python项目打包在一起,通过嵌入式一键整合包解决项目的分发问题。
本次我们以一键扒谱的项目为例子,演示如何将项目直接打包为一键整合包,方便其他用户运行使用。
嵌入式Python处理
首先克隆我们自己的项目:
git clone https://github.com/v3ucn/YiJianBaPu.git
正常流程是通过pip安装项目的依赖。
但现在我们不直接通过pip安装依赖,而是通过嵌入式的安装包。
进入Python官方的下载页面:
https://www.python.org/downloads/windows/
下载Windows embeddable package (64-bit)安装包,注意是embeddable版本的,并不是传统安装包,同时版本也需要和开发项目的Python版本吻合:

随后将其解压到项目的根目录,并且下载get-pip.py文件,放入到刚刚解压的安装包内,下载地址:
https://bootstrap.pypa.io/get-pip.py
放入之后的目录结构如下:
D:\work\YiJianBaPu\python310>tree /f
Folder PATH listing for volume 新加卷
Volume serial number is 9824-5798
D:.
get-pip.py
libcrypto-1_1.dll
libffi-7.dll
libssl-1_1.dll
LICENSE.txt
pyexpat.pyd
python.cat
python.exe
python3.dll
python310.dll
python310.zip
python310._pth
pythonw.exe
select.pyd
sqlite3.dll
unicodedata.pyd
vcruntime140.dll
vcruntime140_1.dll
winsound.pyd
_asyncio.pyd
_bz2.pyd
_ctypes.pyd
_decimal.pyd
_elementtree.pyd
_hashlib.pyd
_lzma.pyd
_msi.pyd
_multiprocessing.pyd
_overlapped.pyd
_queue.pyd
_socket.pyd
_sqlite3.pyd
_ssl.pyd
_uuid.pyd
_zoneinfo.pyd
随后在项目的根目录执行命令:
.\python310\python.exe .\python310\get-pip.py
注意这里的python.exe并不是本地开发环境的Python,而是嵌入式解释器的Python。
此时我们的目录中多出两个文件夹Lib和Scripts:
D:\work\YiJianBaPu\python310>tree
Folder PATH listing for volume 新加卷
Volume serial number is 9824-5798
D:.
├───Lib
│ └───site-packages
│ ├───pip
│ │ ├───_internal
│ │ │ ├───cli
│ │ │ │ └───__pycache__
│ │ │ ├───commands
│ │ │ │ └───__pycache__
│ │ │ ├───distributions
│ │ │ │ └───__pycache__
│ │ │ ├───index
│ │ │ │ └───__pycache__
│ │ │ ├───locations
│ │ │ │ └───__pycache__
│ │ │ ├───metadata
│ │ │ │ ├───importlib
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───models
│ │ │ │ └───__pycache__
│ │ │ ├───network
│ │ │ │ └───__pycache__
│ │ │ ├───operations
│ │ │ │ ├───build
│ │ │ │ │ └───__pycache__
│ │ │ │ ├───install
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───req
│ │ │ │ └───__pycache__
│ │ │ ├───resolution
│ │ │ │ ├───legacy
│ │ │ │ │ └───__pycache__
│ │ │ │ ├───resolvelib
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───utils
│ │ │ │ └───__pycache__
│ │ │ ├───vcs
│ │ │ │ └───__pycache__
│ │ │ └───__pycache__
│ │ ├───_vendor
│ │ │ ├───cachecontrol
│ │ │ │ ├───caches
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───certifi
│ │ │ │ └───__pycache__
│ │ │ ├───chardet
│ │ │ │ ├───cli
│ │ │ │ │ └───__pycache__
│ │ │ │ ├───metadata
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───colorama
│ │ │ │ ├───tests
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───distlib
│ │ │ │ └───__pycache__
│ │ │ ├───distro
│ │ │ │ └───__pycache__
│ │ │ ├───idna
│ │ │ │ └───__pycache__
│ │ │ ├───msgpack
│ │ │ │ └───__pycache__
│ │ │ ├───packaging
│ │ │ │ └───__pycache__
│ │ │ ├───pkg_resources
│ │ │ │ └───__pycache__
│ │ │ ├───platformdirs
│ │ │ │ └───__pycache__
│ │ │ ├───pygments
│ │ │ │ ├───filters
│ │ │ │ │ └───__pycache__
│ │ │ │ ├───formatters
│ │ │ │ │ └───__pycache__
│ │ │ │ ├───lexers
│ │ │ │ │ └───__pycache__
│ │ │ │ ├───styles
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───pyparsing
│ │ │ │ ├───diagram
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───pyproject_hooks
│ │ │ │ ├───_in_process
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───requests
│ │ │ │ └───__pycache__
│ │ │ ├───resolvelib
│ │ │ │ ├───compat
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───rich
│ │ │ │ └───__pycache__
│ │ │ ├───tenacity
│ │ │ │ └───__pycache__
│ │ │ ├───tomli
│ │ │ │ └───__pycache__
│ │ │ ├───truststore
│ │ │ │ └───__pycache__
│ │ │ ├───urllib3
│ │ │ │ ├───contrib
│ │ │ │ │ ├───_securetransport
│ │ │ │ │ │ └───__pycache__
│ │ │ │ │ └───__pycache__
│ │ │ │ ├───packages
│ │ │ │ │ ├───backports
│ │ │ │ │ │ └───__pycache__
│ │ │ │ │ └───__pycache__
│ │ │ │ ├───util
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───webencodings
│ │ │ │ └───__pycache__
│ │ │ └───__pycache__
│ │ └───__pycache__
│ ├───pip-23.3.1.dist-info
│ ├───pkg_resources
│ │ ├───extern
│ │ │ └───__pycache__
│ │ ├───_vendor
│ │ │ ├───importlib_resources
│ │ │ │ └───__pycache__
│ │ │ ├───jaraco
│ │ │ │ ├───text
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───more_itertools
│ │ │ │ └───__pycache__
│ │ │ ├───packaging
│ │ │ │ └───__pycache__
│ │ │ ├───platformdirs
│ │ │ │ └───__pycache__
│ │ │ └───__pycache__
│ │ └───__pycache__
│ ├───setuptools
│ │ ├───command
│ │ │ └───__pycache__
│ │ ├───config
│ │ │ ├───_validate_pyproject
│ │ │ │ └───__pycache__
│ │ │ └───__pycache__
│ │ ├───extern
│ │ │ └───__pycache__
│ │ ├───_distutils
│ │ │ ├───command
│ │ │ │ └───__pycache__
│ │ │ └───__pycache__
│ │ ├───_vendor
│ │ │ ├───importlib_metadata
│ │ │ │ └───__pycache__
│ │ │ ├───importlib_resources
│ │ │ │ └───__pycache__
│ │ │ ├───jaraco
│ │ │ │ ├───text
│ │ │ │ │ └───__pycache__
│ │ │ │ └───__pycache__
│ │ │ ├───more_itertools
│ │ │ │ └───__pycache__
│ │ │ ├───packaging
│ │ │ │ └───__pycache__
│ │ │ ├───tomli
│ │ │ │ └───__pycache__
│ │ │ └───__pycache__
│ │ └───__pycache__
│ ├───setuptools-68.2.2.dist-info
│ └───_distutils_hack
│ └───__pycache__
└───Scripts
随后修改python310._pth文件,将内容改成下面这样:
python310.zip
.
# Uncomment to run site.main() automatically
import site
至此,嵌入式解释器就配置好了。
嵌入式安装依赖
此后,当我们需要安装依赖时,必须用嵌入式的解释器进行安装:
.\python310\python.exe -m pip install noisereduce -t E:\work\YiJianBaPu\python310\Lib\site-packages
上面的命令展示如何嵌入式安装依赖库noisereduce。
这里需要注意的时,解释器必须是嵌入式解释器.\python310\python.exe,同时通过-t参数来指定三方库的位置,也就是说,必须安装到项目的目录中,而不是系统的默认开发环境目录。
安装成功后,我们必须可以在项目的目录下可以找到这个库:
D:\work\YiJianBaPu\python310\Lib\site-packages>tree
Folder PATH listing for volume 新加卷
Volume serial number is 9824-5798
D:.
├───noisereduce
│ ├───spectralgate
│ │ └───__pycache__
│ ├───torchgate
│ │ └───__pycache__
│ └───__pycache__
如此,依赖和解释器就紧密结合在一起了,换台机器,并不需要安装也可以直接启动。
一键启动
现在,我们来编写一键启动脚本,launch.bat文件:
@echo off
chcp 65001
@echo 开始运行
call .\python310\python.exe -m spleeter separate -p spleeter:2stems -o ./output ./test.mp3
call .\python310\python.exe ./infer.py --model ./ckpt/model_ckpt_steps_104000_simplified.ckpt --wav ./output/test/vocals.wav
@echo 处理完毕,请按任意键
call pause
这里chcp命令用来声明编码,防止中文提示乱码。
call用来执行脚本,注意解释器必须使用项目内置的嵌入式解释器.\python310\python.exe
随后双击执行脚本launch.bat,程序返回:
Active code page: 65001
开始运行
INFO:spleeter:File ./output\test/vocals.wav written succesfully
INFO:spleeter:File ./output\test/accompaniment.wav written succesfully
accumulate_grad_batches: 1, audio_sample_rate: 44100, binarization_args: {'num_workers': 0, 'shuffle': True}, binarizer_cls: preprocessing.MIDIExtractionBinarizer, binary_data_dir: data/some_ds_fixmel_spk3_aug8/binary,
clip_grad_norm: 1, dataloader_prefetch_factor: 2, ddp_backend: nccl, ds_workers: 4, finetune_ckpt_path: None,
finetune_enabled: False, finetune_ignored_params: [], finetune_strict_shapes: True, fmax: 8000, fmin: 40,
freezing_enabled: False, frozen_params: [], hop_size: 512, log_interval: 100, lr_scheduler_args: {'min_lr': 1e-05, 'scheduler_cls': 'lr_scheduler.scheduler.WarmupLR', 'warmup_steps': 5000},
max_batch_frames: 80000, max_batch_size: 8, max_updates: 10000000, max_val_batch_frames: 10000, max_val_batch_size: 1,
midi_extractor_args: {'attention_drop': 0.1, 'attention_heads': 8, 'attention_heads_dim': 64, 'conv_drop': 0.1, 'dim': 512, 'ffn_latent_drop': 0.1, 'ffn_out_drop': 0.1, 'kernel_size': 31, 'lay': 8, 'use_lay_skip': True}, midi_max: 127, midi_min: 0, midi_num_bins: 128, midi_prob_deviation: 1.0,
midi_shift_proportion: 0.0, midi_shift_range: [-6, 6], model_cls: modules.model.Gmidi_conform.midi_conforms, num_ckpt_keep: 5, num_sanity_val_steps: 1,
num_valid_plots: 300, optimizer_args: {'beta1': 0.9, 'beta2': 0.98, 'lr': 0.0001, 'optimizer_cls': 'torch.optim.AdamW', 'weight_decay': 0}, pe: rmvpe, pe_ckpt: pretrained/rmvpe/model.pt, permanent_ckpt_interval: 40000,
permanent_ckpt_start: 200000, pl_trainer_accelerator: auto, pl_trainer_devices: auto, pl_trainer_num_nodes: 1, pl_trainer_precision: 32-true,
pl_trainer_strategy: auto, raw_data_dir: [], rest_threshold: 0.1, sampler_frame_count_grid: 6, seed: 114514,
sort_by_len: True, task_cls: training.MIDIExtractionTask, test_prefixes: None, train_set_name: train, units_dim: 80,
units_encoder: mel, units_encoder_ckpt: pretrained/contentvec/checkpoint_best_legacy_500.pt, use_buond_loss: True, use_midi_loss: True, val_check_interval: 4000,
valid_set_name: valid, win_size: 2048
| load 'model' from 'ckpt\model_ckpt_steps_104000_simplified.ckpt'.
100%|████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:01<00:00, 1.88it/s]
处理完毕,请按任意键
Press any key to continue . . .
可以看到,执行结果和传统终端执行的结果是一致的。
区别是使用者并不需要本地配置Python环境,只需要下载项目的整合包即可。
结语
通过嵌入式打包,可以把Python程序和解释器、依赖库一并打包分发给非专业用户,由此就提高了这部分用户群体的使用体验,最后奉上打包后的整合包,以飨众乡亲:
链接:https://pan.baidu.com/s/1HN3LAusdtofwqtb4gnSwvQ?pwd=72yq
一键整合,万用万灵,Python3.10项目嵌入式一键整合包的制作(Embed)的更多相关文章
- 笔精墨妙,妙手丹青,微软开源可视化版本的ChatGPT:Visual ChatGPT,人工智能AI聊天发图片,Python3.10实现
说时迟那时快,微软第一时间发布开源库Visual ChatGPT,把 ChatGPT 的人工智能AI能力和Stable Diffusion以及ControlNet进行了整合.常常被互联网人挂在嘴边的& ...
- Mybatis与Spring整合,使用了maven管理项目,作为初学者觉得不错,转载下来
转载自:http://www.cnblogs.com/xdp-gacl/p/4271627.html 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype ...
- 《实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)》
<实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)> 基本信息 作者: 徐康明 辛洪郁 出版社:电子工业出版社 ISBN:9787121221378 上架时间:2014 ...
- 看github上有18万star的第一开源项目如何教你学前端编程的
作为 Github | star 第一开源项目,已经超过18万 star:比之前最火的bootstrap的10万star还要多出8w,freeCodeCamp 越来越受关注,建站两年时间不到已经近40 ...
- 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】
初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...
- 一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_200 时光荏苒,过隙白驹,即将进入2022年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和 ...
- 把盏言欢,款款而谈,ChatGPT结合钉钉机器人(outgoing回调)打造人工智能群聊/单聊场景,基于Python3.10
就像黑火药时代里突然诞生的核弹一样,OpenAI的ChatGPT语言模型的横空出世,是人工智能技术发展史上的一个重要里程碑.这是一款无与伦比.超凡绝伦的模型,能够进行自然语言推理和对话,并且具有出色的 ...
- 乾坤大挪移,如何将同步阻塞(sync)三方库包转换为异步非阻塞(async)模式?Python3.10实现。
众所周知,异步并发编程可以帮助程序更好地处理阻塞操作,比如网络 IO 操作或文件 IO 操作,避免因等待这些操作完成而导致程序卡住的情况.云存储文件传输场景正好包含网络 IO 操作和文件 IO 操作, ...
- 物以类聚人以群分,通过GensimLda文本聚类构建人工智能个性化推荐系统(Python3.10)
众所周知,个性化推荐系统能够根据用户的兴趣.偏好等信息向用户推荐相关内容,使得用户更感兴趣,从而提升用户体验,提高用户粘度,之前我们曾经使用协同过滤算法构建过个性化推荐系统,但基于显式反馈的算法就会有 ...
- 吾剑未尝不利,国内Azure平替,科大讯飞人工智能免费AI语音合成(TTS)服务Python3.10接入
微软Azure平台的语音合成(TTS)技术确实神乎其技,这一点在之前的一篇:含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入),已经做过详细介绍, ...
随机推荐
- 2021-7-6 vue音乐播放器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- DevOps|服务治理与服务保障实践指南
朱晋君@君哥聊技术 我自己为了消化里边的内容,整理了一个脑图,希望对你有帮助. 凌晨四点被公司的监控告警叫醒了,告警的原因是生产环境跑批任务发生故障.即刻起床处理故障,但还是花了不少时间才解决. 这次 ...
- 好用工具:Save All Resources
说明 该插件可以下载网页中的所有资源 使用方法
- Gin中间件开发
Gin是一个用Go语言编写的Web框架,它提供了一种简单的方式来创建HTTP路由和处理HTTP请求.中间件是Gin框架中的一个重要概念,它可以用来处理HTTP请求和响应,或者在处理请求之前和之后执行一 ...
- Sealos 国内集群正式上线,可一键运行 LLama2 中文版大模型!
2023 年 7 月 19 日,MetaAI 宣布开源旗下的 LLama2 大模型,Meta 首席科学家.图灵奖得主 Yann LeCun 在推特上表示 Meta 此举可能将改变大模型行业的竞争格局. ...
- 零代码,使用 Dify 和 Laf 两分钟接入企业微信 AI 机器人
Dify 允许创建 AI 应用,并提供二次开发的能力.这里我将演示创建一个法律问答助手的 AI 应用,称作"知法".在本篇教程中,我将指导你为"知法"接入企业微 ...
- MySQL到SelectDB的实时同步策略
随着数据分析在业务决策中变得日益重要,数据实时同步和分析成为企业提升竞争力的关键.MySQL 作为广泛使用的关系型数据库,其数据存储丰富,但无法满足大规模数据分析和高并发查询的需求.而 SelectD ...
- 发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
蓝绿发布(Blue-Green Deployment) 蓝绿发布提供了一种零宕机的部署方式.不停老版本,部署新版本进行测试,确认OK,将流量切到新版本,然后老版本同时也升级到新版本.始终有两个版本同时 ...
- 为何 Linus 一个人就能写出这么强的系统,中国却做不出来?
前言 知乎上有一个提问:为何 Linus 一个人就能写出这么强的系统,中国却做不出来? ↓↓↓ 今天,我们就这个话题,一起来做个讨论. 不知道大家是怎么看这个问题的?是美国人更聪明吗,所以才能写出这么 ...
- gitlab与LDAP 联调
gitlab整理 目录 gitlab整理 1.安装Gitlab依赖包 2.下载,安装 3.配置,访问域名及邮箱 4.初始化,启动 5.访问,以及邮箱测试 5.1汉化 6.问题总结处理 6.1安装时出现 ...