使用Python embeddable package 版(嵌入式、绿色版)分发自己的python程序

1、Python embeddable package 版介绍

https://www.python.org/downloads/windows/ Download Windows embeddable package (32-bit)

这个版本又称为嵌入式版,绿色版。该版本就是一个zip压缩包,解压缩之后得到一个文件夹,该文件夹包含了一个最小python运行环境(不包括doc、idle、pip等)。

该版本主要用途有:

  • 嵌入其他程序之中
  • 与系统python环境隔离
  • 方便分发我们的脚本

该版可以方便的在python官网下载得到,下载后将其解压到想要的目录即可。

2、配置包导入搜索路径

该版本默认的包导入搜索路径由根目录内 pythonXX._pth (XX为版本号)文件决定,该文件默认内容如下:

python38.zip
.
# Uncomment to run site.main() automatically
#import site

也就是说默认情况下该python环境只会从python38.zip.(该环境根目录)搜索可导入的包。可以根据自己的需要,手动修改该文件来配置包导入搜索路径。
在实际使用过程中,我们一般将该环境的目录作为我们程序的子目录。为了能正确导入我们程序目录内的自定义模块,只需要在pythonXX._PTH文件中添加..,即该环境目录的上级目录。

3、使用第三方库

使用第三方库有如下两种思路。

3.1 手动复制第三方库

把自己程序用到的第三方库复制到指定文件夹,并把该文件夹配置到pythonXX._pth 文件即可。

3.2 使用pip安装第三方库

由于该环境不集成pip包,所以需要手动安装。
首先下载get-pip.py脚本,可以参考官方教程:https://pip.pypa.io/en/stable/installation。
打开Windows命令行,cd到该python环境根目录,执行python get-pip.py,会自动下载并安装pip包。
pip安装完成后,会自动在该环境根目录创建Lib\site-packagesScripts文件夹,分别包含通过pip安装的第三方包和pip工具本身。
但是,此时第三方包所在的目录并未加入到包导入搜索路径里。
可以手动修改pythonXX._pth文件,添加一行:

Lib\site-packages

也可以,把pythonXX._pth文件里的#import site前的#删除。即在该环境初始化时,导入site模块,该模块会附加特定的路径到包导入搜索路径并且添加一些内建对象,其中就包括python环境根目录的site-packgages路径。
现在,就可以通过 pip来安装第三方库。
但是由于此时我们并没有设置系统环境变量,不能直接执行pip install 命令。我们只能cd到该环境根目录,用python -m pip install命令来安装。

4、分发程序

现在我们把程序连同python环境一同打包给别人,别人并无法运行。因为我们没有配置环境变量。
但是我们并不能奢求别人会配置环境变量。而应该应尽量让自己的程序包像绿色软件一样,解压即可直接运行。要做到这一步,我们可以借助windows批处理脚本来完成。
新建一个bat批处理文件,在这个批处理文件里,我们首先添加相关目录到系统环境变量,然后执行python yourscript.py,下面是一个例子:

@echo off
set path=%path%;%cd%\python;
python yourscript.py

在这个批处理里%path%指系统原本的环境变量,%cd%指当前目录。多个环境变量路径用;分割。
如果想在批处理命令里用pip安装第三方包,请使用python -m pip install命令,单纯的pip命令会在整体文件夹路径发生改变的时候出错。
这里添加的系统环境变量是临时的,只对当前命令行有效。

这样以来,别人就可以通过双击批处理命令文件来打开我们的程序了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣139.单词拆分

思路:动态规划,设dp[]记录当前字符能不能通过字典里的单词到达,双层循环,外层循环遍历字符串每一个字符,内层遍历当前i字符之前的所有以i字符结尾的子串 例如字符串:leetcode i遍历到了t 那么内层循环就…

【C++】STL 容器 - map 关联容器 ③ ( map 容器常用 api 操作 | map 容器迭代器遍历 | map#insert 函数返回值处理 )

文章目录 一、map 容器迭代器遍历1、map 容器迭代器2、代码示例 二、map 容器插入结果处理1、map#insert 函数返回值处理2、代码示例 一、map 容器迭代器遍历 1、map 容器迭代器 C 语言中 标准模板库 ( STL ) 的 std::map 容器 提供了 begin() 成员函数 和 end() 成员函数 , 这…

Seata服务搭建与模式实现

日升时奋斗,日落时自省 目录 1、简述 2、Seata优越性 3、Seata组成 4、Seata模式 4.1、XA 模式 4.2、AT 模式(默认模式) 4.3、TCC 模式 4.4、SAGA 模式 4.5、XA协议 5、Seata服务部署 5.1、文件数据源部署 5.1.1、下载并安装Seata 5.1.2、启动Seata服…

【前端】JQuery(学习笔记)

一、JQuery概述 1、JQuery框架 JQuery:一个JavaScript框架。简化JS开发 JavaScript框架:本质上就是一些js文件,封装了js的原生代码 2、JQuery版本 1)1.x 兼容ie678,使用最为广泛的,官方只做BUG维护,功…

Ts自封装WebSocket心跳重连

WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许客户端和服务器之间进行双向实时通信。 所谓心跳机制,就是在长时间不使用WebSocket连接的情况下,通过服务器与客户端之间按照一定时间间隔进行少量数据的通信来达到确认连接稳定的手…

【PostgreSQL】从零开始:(四十二)系统列

PostgreSQL 中的系统列 PostgreSQL 中的系统列是一组特殊的列,用于存储关于表和视图的元数据信息。这些列是由 PostgreSQL 数据库自动创建和维护的,并且不能直接修改或删除。 每个表都有多个系统列,这些列由系统隐式定义。因此,…

目标检测YOLO实战应用案例100讲-基于小样本学习的光伏红外图像缺陷 检测

目录 前言 国内外研究现状 光伏智能运维发展现状 航拍图像光伏检测研究现状

HarmonyOS4.0系统性深入开发11通过message事件刷新卡片内容

通过message事件刷新卡片内容 在卡片页面中可以通过postCardAction接口触发message事件拉起FormExtensionAbility,然后由FormExtensionAbility刷新卡片内容,下面是这种刷新方式的简单示例。 在卡片页面通过注册Button的onClick点击事件回调,…

数据库中的时间和前台展示的时间不一样,如何保存日期格式的数据到数据库? 如何展示数据库的日期数据到前台

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) ✈️公众号 | 热爱技术的小郑 文章底部有个人公众号二维码。回复 Java全套视频教程 或 前端全套视频教程 即可获取 300G 教程资料…

【深入浅出RocketMQ原理及实战】「云原生升级系列」打造新一代云原生“消息、事件、流“统一消息引擎的融合处理平台

打造新一代云原生"消息、事件、流"统一消息引擎的融合处理平台 云原生架构RocketMQ的云原生架构实现RocketMQ的云原生发展历程互联网时期的诞生无法支持云原生的能力 云原生阶段的升级云原生升级方向促进了Mesh以及多语言化发展可分合化的存算分离架构存储分离架构的…

数据结构OJ实验2-链表

A. DS单链表--存储结构与操作 题目描述 实现含头结点的单链表 属性包括:data数据域、next指针域 操作包括:插入、删除、查找 注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据 输入 第1行先输入n…

听GPT 讲Rust源代码--library/portable-simd

File: rust/library/portable-simd/crates/core_simd/examples/spectral_norm.rs spectral_norm.rs是一个示例程序,它展示了如何使用Portable SIMD库中的SIMD(Single Instruction Multiple Data)功能来实现频谱规范化算法。该示例程序是Rust源…

跟着cherno手搓游戏引擎【2】:日志系统spdlog和premake的使用

配置: 日志库文件github: GitHub - gabime/spdlog: Fast C logging library. 新建vendor文件夹 将下载好的spdlog放入 配置YOTOEngine的附加包含目录: 配置Sandbox的附加包含目录: 包装spdlog: 在YOTO文件夹下创建…

在Django中配置PostgreSQL

下载并安装PostgreSQL PostgreSQL: Downloads 安装依赖psycopg2 python -m pip install psycopg2 修改Django配置文件settings.py 📌编辑 mysite/settings.py 文件前,先设置 TIME_ZONE 为你自己时区。 LANGUAGE_CODE zh-Hans TIME_ZONE Asia/Shang…

【Elasticsearch源码】 分片恢复分析

带着疑问学源码,第七篇:Elasticsearch 分片恢复分析 代码分析基于:https://github.com/jiankunking/elasticsearch Elasticsearch 8.0.0-SNAPSHOT 目的 在看源码之前先梳理一下,自己对于分片恢复的疑问点: 网上对于E…

【基础】【Python网络爬虫】【12.App抓包】reqable 安装与配置(附大量案例代码)(建议收藏)

Python网络爬虫基础 App抓包1. App爬虫原理2. reqable 的安装与配置reqable 安装教程reqable 的配置 3. 模拟器的安装与配置夜神模拟器的安装夜神模拟器的配置配置代理配置证书 4. 内联调试及注意事项软件启动顺开启抓包功reqable面板功列表部件功能列表数据快捷操作栏 夜神模拟…

【ASP.NET Core 基础知识】--目录

介绍 1.1 什么是ASP.NET Core1.2 ASP.NET Core的优势1.3 ASP.NET Core的版本历史 环境设置 2.1 安装和配置.NET Core SDK2.2 使用IDE(Integrated Development Environment):Visual Studio Code / Visual Studio 项目结构 3.1 ASP.NET Core项…

WPF+Halcon 培训项目实战 完结(13):HS 鼠标绘制图形

文章目录 前言相关链接项目专栏运行环境匹配图片矩形鼠标绘制Halcon添加右键事件Task封装运行结果个人引用问题原因推测 圆形鼠标绘制代码运行结果 课程完结: 前言 为了更好地去学习WPFHalcon,我决定去报个班学一下。原因无非是想换个工作。相关的教学视…

洛谷基础题

输出保留 3 位小数的浮点数 题目描述 读入一个单精度浮点数,保留 3 3 3 位小数输出这个浮点数。 提示:就这题来说,请使用 float 类型的单精度浮点数。 输入格式 只有一行,一个单精度浮点数。 输出格式 也只有一行&#xf…

【java爬虫】股票数据获取工具前后端代码

前面我们有好多文章都是在介绍股票数据获取工具,这是一个前后端分离项目 后端技术栈:springboot,sqlite,jdbcTemplate,okhttp 前端技术栈:vue,element-plus,echarts,ax…