python嵌入式打包即embed版安装使用

一、下载安装

官网直接下载对应的embed版本的文件包,解压即可。官网。我这里把解释器python-3115-embed-amd64​和代码program文件夹放在同一层级,文件目录如下,后面的路径也以此为准。
文件目录

二、库加载索引修改

在解压的python环境文件夹里找到python311._pth(因为我下的是3.11.5版本,因此此处是python311,不同版本的名称后面数字不同),修改内容:将import 前面的# 去掉。完成之后,便于运行中检索到该环境。

# Uncomment to run site.main() automatically
#import site
修改为:
# Uncomment to run site.main() automatically
import site

三、安装pip

下载get-pip.py​在python环境文件夹内和python.exe​在同一个文件夹内。
进入该文件夹,如我的解压路径为D:\python_program\python-3115-embed-amd64​,则进入该文件夹,在文件夹路径处输入cmd,即可打开cmd,并运行以下命令:

.\python.exe get-pip.py

会生成两个文件夹Lib和Scripts。

四、配置pip阿里源

在python环境文件夹:D:\python_program\python-3115-embed-amd64​,新建一个pip.ini文件,内容输入:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

五、添加环境变量(可选)

这里是个可选操作,可加也可不加。加入环境变量可以减少后面pip时路径带入。这里要注意的是,如果本身配置有其他python环境,可能会带来干扰,先把本机的python环境变量去掉。
在环境变量path里增加三个路径:D:\python_program\python-3115-embed-amd64​,D:\python_program\python-3115-embed-amd64\Lib\site-packages​,D:\python_program\python-3115-embed-amd64\Scripts​。

六、安装依赖包

我们需要安装依赖时,必须用嵌入式的解释器进行安装,下面是个安装pandas的范列:

.\python-3115-embed-amd64\python.exe -m pip install pandas -t .\python-3115-embed-amd64\Lib\site-packages
注意:

6.1 解释器必须是嵌入式解释器.\python-3115-embed-amd64\python.exe,同时通过-t参数来指定三方库的位置,也就是说,必须安装到项目的目录中,而不是系统的默认开发环境目录。如果前面配置了是嵌入式解释器的环境变量,解释器就不用再输入路径,可以简化命令长度。
6.2 embed版的python过于精简,可能tar包也无法安装,可以下载wheel格式的直接安装。一个查找wheel的网址:piwheels - Package List

七、安装Tkinter

从标准版安装包中解析出Tkinter文件并放入合适部位。我安装的是python3.11.5,因此下载python-3.11.5的exe安装包,用UniExtract进行解包,第一层解包到tcltk.msi文件,再对tcltk.msi继续解析,得到Lib、tcl、Dlls和libs四个文件包。把Lib中的三个文件夹:idlelib、tkinter和turtledemo放入D:\python_program\python-3115-embed-amd64\Lib\site-packages​中,tcl、Dlls和libs三个文件夹放入D:\python_program\python-3115-embed-amd64​中。并修改python311._pth文件,加入四个文件的位置索引。

python311.zip
.
#下面四个是tk的引入包放置位置,从python安装包里拆出来的,Lib中idlelib、tkinter和turtledemo放置在site-packages里
Lib/site-packages
DLLs
libs
tcl
# Uncomment to run site.main() automatically
import site

八、导入自定义模块

试了网上的很多种代码方案都没成功,忽然想到其本身就一个索引文件路径,将自定义模块的路径引入即可,省去了各种写代码等,下面是完整版的pth文件内容,第八行是导入自定义模块。

python311.zip
.
#下面四个是tk的引入包放置位置,从python安装包里拆出来的,Lib中idlelib、tkinter和turtledemo放置在site-packages里
Lib/site-packages
DLLs
libs
tcl
../program#自定义模块路径,这里用了..表示program文件夹与解释器所在的python-3115-embed-amd64同级。
# Uncomment to run site.main() automatically
import site

九、编写启动脚本

@echo off
chcp 65001
echo 开始运行
.\python-3115-embed-amd64\python.exe      .\program\test.py
pause

这里chcp命令用来声明编码,防止中文提示乱码。
注意解释器必须使用项目内置的嵌入式解释器.\python-3115-embed-amd64\python.exe​

十、搭建过程中出现的问题:

10.1 本地环境变量的干扰

本地装有python环境,在第一次进行依赖包安装时总是出现异常报错,删掉本地环境配置后出错减少。重要的是一定要用嵌入式解释器.\python-3115-embed-amd64\python.exe​来进行安装运行等,否则环境干扰会混乱。

10.2 tar格式依赖包报错。

安装tar格式依赖包时总是出错无法安装,可以直接网上查找相关的wheel包进行本地化安装。

10.3 图片相对路径读取失败。

用相对路径的图片在IDE中会正常识别,但在这里会报路径错误,要注意路径的层次。
比如我的图片是放在\program\​下的,与运行的代码py在同一文件夹,在IDE中路径为同一层级,均为当前路径,可以直接文件名引用,但在embed中运行时,因为主路径为python_program​为起点,因此图片路径需要加入上级文件路径,和运行py文件的路径方式一致,路径为:.\program\xxx.png​。
我的文件结构为:
D:\python_program
-program
-python-3115-embed-amd64

10.4 默认保存文件的路径

默认保存文件在bat运行相对路径的起点,比如我默认保存的excel文件出现在python_program内。

10.5 VScode中模块导入失败

两种处理方法:

10.5.1 代码顶部动态地将当前工作目录添加到 sys.path 中。
import sys
import os
sys.path.append(os.getcwd())
10.5.2 修改 VSCode 的 settings.json 文件,设定当前解释器的环境变量

通过VSCode 的 settings.json设置了 PYTHONPATH 环境变量,确保了我的项目路径 my_project 被加入到模块搜索路径中。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python 调试程序: 当前文件",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
// PYTHONPATH 环境变量
        {
    "terminal.integrated.env.windows":
		 {"PYTHONPATH": "/python_program"},
    "terminal.integrated.env.linux":
		 {"PYTHONPATH": "/path/to/your/project"},
    "terminal.integrated.env.osx":
		 {"PYTHONPATH": "/path/to/your/project"}
		}
    ]
}

原文发布于:https://www.tndyx.cc/docs/程序代码/python/2024-03-30python嵌入式打包即embed版安装使用/
参考:

一键整合,万用万灵,Python3.10项目嵌入式一键整合包的制作(Embed)_python 整合包怎么做-CSDN博客

Python安装包–embedded版本安装及pip配置_python_embeded-CSDN博客

制作轻量级Python环境指南(包含在Python Embeddable版本中增加Tkinter:Tk支持) - 知乎 (zhihu.com)

Python打包,嵌入式方式打包,而且是官方推荐的打包方式-Python嵌入式打包真的不如pyinstaller吗?_python嵌入版-CSDN博客

从根本上优雅地解决 VSCode 中的 Python 模块导入问题-CSDN博客

  • 31
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值