Windows环境下用python嵌入式环境跑程序可太方便了

Windows环境下用python嵌入式环境跑程序可太方便了

    • 1. 嵌入式包默认的文件夹设置
    • 2. 建立python环境文件夹
    • 3. 添加python索引包路径
    • 4. 安装pip和requirements
    • 5. 运行环境
    • 6. 完整的powershell install.bat 脚本

之前觉得windows电脑安装的python环境太乱太不纯净,或者临时需要去别的办公点快速运行python环境比较麻烦,因此了解了一下python嵌入式版本。上一期windows环境下安装多个任意版本的python环境教大家如何搭建一个python嵌入式环境的几个基本步骤。本期用脚本将他们串起来。

首先我的思路是,安装python基本环境 + 添加python包索引路径 + 配置pip + 用pip下载所需的第三方库,最后运行测试。因此windows脚本就围绕这几个步骤展开。

1. 嵌入式包默认的文件夹设置

文件夹设置与工程类似,pkg是用于安装python环境的配置文件,src是源代码,test是测试脚本存放路径

5. 目录结构:根目录 ---|--- pkg (python环境安装包)|--- src   (源代码存放路径)|---test    (测试脚本存放路径)

2. 建立python环境文件夹

根据pycharm的习惯,环境一般安装在venv下面。因此命令需要mkdir,bat脚本新建文件夹的命令是md。我们注意到一般从官网下载python 嵌入式包是zip压缩文件,因此我们也需要用一个压缩脚本将其压缩。我选择的是winrar,当然为了防止大家不爱用这个软件,也添加了手动解压的判断分支。

脚本如下:

echo\
echo 环境检查中......
if exist %head%\venv (echo 已经存在环境,如果您希望重新安装或修复环境,请删除该文件夹并重新执行本文件pauseexit
)if exist "D:\Program Files\WinRAR\winrar.exe" (set localwinrar=D:\Program Files\WinRAR\winrar.exegoto compressFileLine
) else (echo 默认路径下没有winrar文件...echo 请输入您电脑上的winrar可执行文件路径和名字echo (如 C:\Program Files\WinRAR\winrar.exe)set /p localwinrar=(如果没有winrar按回车手动解压):
)
echo\if "%localwinrar%" == "" (echo 请手动解压至%head%\venv\python该路径下后pausegoto bulidPythonBaseLine
):compressFileLine
echo\
echo 正在解压缩所需的文件...
if exist %head%\pkg\python-3.9.13-embed-amd64.zip (md %head%\venvmd %head%\venv\pythonrem 测试代码,后续需要继续改进"%localwinrar%" e -or "%head%\pkg\python-3.9.13-embed-amd64.zip" "%head%\venv\python"
) else (echo 关键文件丢失,安装失败!!!pauseexit
)
echo\

3. 添加python索引包路径

python索引包路径是由python*._pth文件决定的,为了支持第三方库索引和自己编写代码的索引。我们需要编写一个python脚本修改这个python*._pth文件。
python脚本update-pth.py

import syswith open("python39._pth", "a") as f:f.writelines(["\n", "Lib\\site-packages\n", "..\n", "..\\..\\src\n"])

BAT脚本

:bulidPythonBaseLine
echo\
echo 正在构建python包索引环境...if exist %head%\venv\python (echo\
) else (echo 不存在有效的python路径pauseexit
)cd %head%\venv\python
set pythonenv=%head%\venv\pythonrem 执行一条命令,将命令结果赋值给pythonVersion
rem for /f "delims=" %%t in ('命令字符串') do set str=%%tfor /f "delims=" %%t in ('.\python.exe --version') do set pythonVersion=%%t
echo 您当前所使用的python环境%pythonVersion%set pyv310=3.10
set pyv39=3.9
set pyv38=3.8
set pyv37=3.7
set pyv36=3.6setLocal EnableDelayedExpansion
if not "x!pythonVersion:%pyv310%=!"=="x%pythonVersion%" (echo 310
) else if not "x!pythonVersion:%pyv39%=!"=="x%pythonVersion%" (echo 当前索引环境为Python3.9rem 不知道为啥这里有bug,有的时候必须要先开一下再关掉,否则没法执行rem @echo onrem @echo offset fileName=python39._pthecho 修改索引文件%fileName%%pythonenv%\python.exe %head%\pkg\update-pth.py %fileName%) else if not "x!pythonVersion:%pyv38%=!"=="x%pythonVersion%" (echo 38
) else if not "x!pythonVersion:%pyv37%=!"=="x%pythonVersion%" (echo 37
) else if not "x!pythonVersion:%pyv36%=!"=="x%pythonVersion%" (echo 36
) else (echo 不支持的版本!!!pauseexit
)
endlocal
echo\

4. 安装pip和requirements

使用get-pip.py 安装pip,官方已经给出的脚本,没啥好说的,复制下载写成脚本即可。然后根据项目需要下载requirements中的内容,pip的使用详细方法具体可以参考https://blog.csdn.net/immerseinstudy/article/details/124072198

echo\
echo 正在安装pip环境...
"%pythonenv%\python.exe" "%head%\pkg\get-pip.py" -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
echo Done
echo\echo\
echo 正在安装项目所需安装包...
"%pythonenv%\Scripts\pip.exe" install -r "%head%\pkg\requirements.txt" -i https://pypi.tuna.tsinghua.edu.cn/simple/
cd %head%
echo Done
echo\

5. 运行环境

运行环境的方法如下,python.exe main.py。只不过添加了绝对路径。注意bash脚本可以通过pwd获取当前路径,而bat脚本的当前路径是存放在%cd%变量中。

echo\
echo 运行测试用例...
md "%head%\test"
"%pythonenv%\python.exe" "%head%\src\main.py"
echo 运行成功
echo\echo 恭喜 ^_^!! 环境搭建完成~~

有需要我会把完整的嵌入式压缩包放上来,因为我目前还不知道怎么上传内容到csdn。。

6. 完整的powershell install.bat 脚本

@echo offecho\
echo XXX软件 -- 作者:XXX
echo\echo ----------------------------------------
echo 嵌入式python环境安装中......
echo 【1】本地环境中需要先安装好WinRAR环境
echo ----------------------------------------
set head=%cd%echo\
echo 环境检查中......
if exist %head%\venv (echo 已经存在环境,如果您希望重新安装或修复环境,请删除该文件夹并重新执行本文件pauseexit
)if exist "D:\Program Files\WinRAR\winrar.exe" (set localwinrar=D:\Program Files\WinRAR\winrar.exegoto compressFileLine
) else (echo 默认路径下没有winrar文件...echo 请输入您电脑上的winrar可执行文件路径和名字echo (如 C:\Program Files\WinRAR\winrar.exe)set /p localwinrar=(如果没有winrar按回车手动解压):
)
echo\if "%localwinrar%" == "" (echo 请手动解压至%head%\venv\python该路径下后pausegoto bulidPythonBaseLine
):compressFileLine
echo\
echo 正在解压缩所需的文件...
if exist %head%\pkg\python-3.9.13-embed-amd64.zip (md %head%\venvmd %head%\venv\pythonrem 测试代码,后续需要继续改进"%localwinrar%" e -or "%head%\pkg\python-3.9.13-embed-amd64.zip" "%head%\venv\python"
) else (echo 关键文件丢失,安装失败!!!pauseexit
)
echo\:bulidPythonBaseLine
echo\
echo 正在构建python包索引环境...if exist %head%\venv\python (echo\
) else (echo 不存在有效的python路径pauseexit
)cd %head%\venv\python
set pythonenv=%head%\venv\pythonrem 执行一条命令,将命令结果赋值给pythonVersion
rem for /f "delims=" %%t in ('命令字符串') do set str=%%tfor /f "delims=" %%t in ('.\python.exe --version') do set pythonVersion=%%t
echo 您当前所使用的python环境%pythonVersion%set pyv310=3.10
set pyv39=3.9
set pyv38=3.8
set pyv37=3.7
set pyv36=3.6setLocal EnableDelayedExpansion
if not "x!pythonVersion:%pyv310%=!"=="x%pythonVersion%" (echo 310
) else if not "x!pythonVersion:%pyv39%=!"=="x%pythonVersion%" (echo 当前索引环境为Python3.9rem 不知道为啥这里有bug,有的时候必须要先开一下再关掉,否则没法执行rem @echo onrem @echo offset fileName=python39._pthecho 修改索引文件%fileName%%pythonenv%\python.exe %head%\pkg\update-pth.py %fileName%) else if not "x!pythonVersion:%pyv38%=!"=="x%pythonVersion%" (echo 38
) else if not "x!pythonVersion:%pyv37%=!"=="x%pythonVersion%" (echo 37
) else if not "x!pythonVersion:%pyv36%=!"=="x%pythonVersion%" (echo 36
) else (echo 不支持的版本!!!pauseexit
)
endlocal
echo\echo\
echo 正在安装pip环境...
"%pythonenv%\python.exe" "%head%\pkg\get-pip.py" -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
echo Done
echo\echo\
echo 正在安装项目所需安装包...
"%pythonenv%\Scripts\pip.exe" install -r "%head%\pkg\requirements.txt" -i https://pypi.tuna.tsinghua.edu.cn/simple/
cd %head%
echo Done
echo\echo\
echo 运行测试用例...
md "%head%\test"
"%pythonenv%\python.exe" "%head%\src\main.py"
echo 运行成功
echo\echo 恭喜 ^_^!! 环境搭建完成~~
pause

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

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

相关文章

python 列表 笛卡尔积_python-列表字典的笛卡尔积

python-列表字典的笛卡尔积我正在尝试编写一些代码来测试一堆输入参数的笛卡尔积。我看过itertools,但是它的product功能并不是我想要的。 是否有一种简单明了的简单方法来制作一个字典,每个字典中有任意数量的键和任意数量的元素,然后生成具…

2022年新版Pycharm通过project interpreter国内镜像源设置

2022年新版Pycharm通过project interpreter国内镜像源设置解决方案速览一、国内镜像源列表二、pycharm访问project interpreter解决方案速览 File->Settings->project interpreter-> -> Available Packages将options打勾,并输入-i https://pypi.tuna.…

git push origin master是什么意思_git 设置远端仓库

欢迎转载,但请在开头或结尾注明原文出处【blog.chaosjohn.com】 前段时间,公司开了一个新项目,买了另一家公司的源码做二次开发。 项目进行了几天后,我突然听到参与开发的几个同学在讨论,关于 “不想把我们修改的版本推给他们”。 我就顿感奇怪,买了源码还要遵循他们的开…

flink 不设置水印_从0到1学习Flink—— Flink parallelism 和 Slot 介绍

前言之所以写这个是因为前段时间自己的项目出现过这样的一个问题:1Caused by: akka.pattern.AskTimeoutException: 2Ask timed out on [Actor[akka://flink/user/taskmanager_0#15608456]] after [10000 ms]. 3Sender[null] sent message of type "org.apache.…

cad设计院常用字体_趣谈 | 那些年我们看过的电气图纸(附CAD/EPLAN区别)

电气二次回路图是我们工作中必不可少的内容,形形色色的图纸我们见过很多,小编就下面额图纸和大家分享一下,仅作为个人观点,大家的意见可在留言区补充哦!先看看几张老外额图纸吧,譬如ABB、GE,但并…

centos写mysql光标移到上一行_mysql:一条SQL更新语句(update)是如何执行的

一条更新语句的执行流程又是怎样的呢?之前你可能经常听DBA同事说,MySQL可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢?我们还是从一个表的一条更新语句说起&a…

小米wifi每天晚上准时断网_小米 11再次确定,将于28日准时发布,售价更感人

今天是12月25日,在28日晚上,小米 11将准时发布。如今,关于小米 11的消息已经越来越多,小米官方也已经确定了不少配置,同时,小米 11的售价也已经有爆料出现。根据爆料消息显示,小米 11此次或为45…

tmc4361 闭环_TMC4361A-LA

TMC4361是一款步进电机伺服控制器,带有S形斜面,适用于实验室自动化,3D打印,扫描仪和其他自动化设备应用。 该设备可用作梯形和先进的SixPoint斜坡发生器。 此外,TMC4361采用Trinamic DcStep,闭环控制和Chop…

opengl 深度详解_一步步学OpenGL(23) -《阴影贴图1》

教程 23阴影贴图1原文: http://ogldev.atspace.co.uk/www/tutorial23/tutorial23.htmlCSDN完整版专栏: https://blog.csdn.net/cordova/article/category/9266966背景阴影和光是紧密联系的,正如你需要光才能投射出阴影。有许多的技术可以生成…

editorloop 占用_速度控制 部分重复 语言学习软件 Loopman

速度控制 部分重复 语言学习软件 Loopman⌘当前价格: 0⌘支持系统: OS X 10.10⌘开发者:⌘服务支持: 官方页面安全下载累计下载次数: 106世界上最便捷的语言学习软件!好的艺术家复制,伟大的艺术家窃取我们知道没有什么能取代你的热情或努力。学习靠耳朵玩…

已知法向量 求投影_MIT—线性代数笔记15 子空间投影

第15讲 子空间投影Projections onto subspaces网易公开课​open.163.com投影(射影)Projections投影问题的几何解释就是:如何在向量a的方向上寻找与向量b距离最近的一点。从图中可以看出,这个距离最近的点p就位于穿过b点并与向量a正…

ug后处理如何加密_UG在NX加工中如何添加后处理文件?

在使用UG加工中,往往使用的机床不一样就要特定后处理文件,那么如何在UG中添加之前制定好的后处理文件呢?下面以UG8.5为例来说明。1、首先确认UG后处理文件是否完整。完整的后处理文件包括后缀为.def、.pui和.tcl的三个文件(注&…

华为mstp多生成树配置_网络工程师(30):多实例生成树如何计算

多实例生成树MSTP包括域间的外部生成树CST和域内的内部生成树IST,我们通称为CIST。我们先讨论CST的计算。在CST中,一个MST域看作是一台"交换机",那么在进行CST计算时,这台"交换机"的桥ID是多少呢?…

url中能出现的字符_python爬虫,解决大众点评字符库反爬机制的经验

刚开始写文章还希望大家可以喜欢,对于爬虫只是个人整理出的方法,爬虫大牛请嘴下留情。“”仅限学术交流,如有冒犯请联系作者删除“”话不多说,想分析天津地区餐饮行业的大致情况,要爬出(商铺名称&#xff0…

上课点名app_【APP种草】网瘾少年的自我救赎之最强锁机软件

相信在这个魔幻的2020,大家都经历了很多个不寻常吧。作为学生党,算是圆梦了在家学习的愿望,可当这一切都变成现实的时候,也还是没逃过点名、没逃过网课,这不,连期末考也又双叕叕地来了。作为一名需要在家完…

qrcode生产带logo_比亚迪换新标?新Logo的含义你了解吗?

对于许多制造业品牌来说,由于时代发展的速度太快,科技的力量进步太快,即便是规模庞大的老牌企业,也需要不断改变自己,以此来适应社会的改变求得生存。这就意味着,无论是什么品牌,都需要定期改变…

超前进位加法器实验报告_干货 | 加法器与反相加法器原理解析

什么是加法器加法器是为了实现加法的,即是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。常用作计算机算术逻辑部件,执行逻辑操作、…

php 支付宝小程序授权登陆验签_星巴克“啡快”登陆支付宝小程序,让你“飞快”取到咖啡...

当代年轻人的生活方式是怎样的?靠地铁通勤,靠咖啡续命早上睁不开眼,咖啡来一杯中午昏昏欲睡,咖啡来一杯晚上熬夜加班,咖啡来一杯喝完这杯,还有一杯“宁可食无肉,不可早无星”是当代年轻人的座右…

python导入同一文件夹下的类_python自定义模块

模块的引入方式:1.import 模块名:导入模块中的所有内容(引入多个用逗号分隔)import random,time2.from 模块名 import 函数名1,函数名2...导入部分模块(导入部分的话直接使用)3.from 模块名 imp…

上河南星海科技_揭秘丨赣江新区网红打卡点,为你按下科技快进键!

人类对科学和未来永无止境的求知欲,是人类社会发展的根本动力之一。整合历史长河中积累的科学文明,探索和体验未来的黑科技,在赣江新区,一座国际创新科技馆在全城翘首中揭开了神秘面纱,一举跃升为赣江新区的网红打卡点…