不需要任何虚拟机!!2024教你Windows环境下用纯净的python环境跑程序
之前觉得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 已经存在环境,如果您希望重新安装或修复环境,请删除该文件夹并重新执行本文件
pause
exit
)
if exist "D:\Program Files\WinRAR\winrar.exe" (
set localwinrar=D:\Program Files\WinRAR\winrar.exe
goto compressFileLine
) else (
echo 默认路径下没有winrar文件...
echo 请输入您电脑上的winrar可执行文件路径和名字
echo (如 C:\Program Files\WinRAR\winrar.exe)
set /p localwinrar=(如果没有winrar按回车手动解压):
)
echo\
if "%localwinrar%" == "" (
echo 请手动解压至%head%\venv\python该路径下后
pause
goto bulidPythonBaseLine
)
:compressFileLine
echo\
echo 正在解压缩所需的文件...
if exist %head%\pkg\python-3.9.13-embed-amd64.zip (
md %head%\venv
md %head%\venv\python
rem 测试代码,后续需要继续改进
"%localwinrar%" e -or "%head%\pkg\python-3.9.13-embed-amd64.zip" "%head%\venv\python"
) else (
echo 关键文件丢失,安装失败!!!
pause
exit
)
echo\
3. 添加python索引包路径
python索引包路径是由python*._pth
文件决定的,为了支持第三方库索引和自己编写代码的索引。我们需要编写一个python脚本修改这个python*._pth
文件。
python脚本update-pth.py
import sys
# 从命令行读取输入值,列表的第二项arg为你要更新的python*._pth文件。
def update_pth():
print("------------------------")
print("------安装解释器路径------")
print("------------------------")
if len(sys.argv) == 2:
arg = sys.argv[1] # python*._pth赋值给arg
with open(arg, "a") as f:
f.writelines(["\n", "Lib\\site-packages\n", "..\n", "..\\..\\src\n"])
with open(arg, "r") as f:
c = f.readlines()
else:
print("解释器更新失败")
if __name__ == "__main__":
update_pth()
BAT脚本
:bulidPythonBaseLine
echo\
echo 正在构建python包索引环境...
if exist %head%\venv\python (
echo\
) else (
echo 不存在有效的python路径
pause
exit
)
cd %head%\venv\python
set pythonenv=%head%\venv\python
rem 执行一条命令,将命令结果赋值给pythonVersion
rem for /f "delims=" %%t in ('命令字符串') do set str=%%t
for /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.6
setLocal EnableDelayedExpansion
if not "x!pythonVersion:%pyv310%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.10
echo 修改索引文件python310._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python310._pth
) else if not "x!pythonVersion:%pyv39%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.9
echo 修改索引文件python39._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python39._pth
) else if not "x!pythonVersion:%pyv38%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.8
echo 修改索引文件python38._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python38._pth
) else if not "x!pythonVersion:%pyv37%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.7
echo 修改索引文件python37._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python37._pth
) else if not "x!pythonVersion:%pyv36%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.6
echo 修改索引文件python36._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python36._pth
) else (
echo 不支持的版本!!!,需要自己更新脚本
pause
exit
)
endlocal
echo\
4. 安装pip和requirements
使用get-pip.py 安装pip,官方已经给出的脚本,脚本的访问地址为https://bootstrap.pypa.io/get-pip.py,
复制到本地保存为get-pip.py,并利用python解释器运行python get-pip.py
就可以。
今年发现get-pip.py的二进制编码文件会经常有更新,因此采用curl命令实时获取最新的get-pip文件。
或者各位可以采用手动下载的方式进行下载,脚本提供了两种选择路径,各位可以按需进行下载。
然后根据项目需要下载requirements中的内容,
pip的使用详细方法具体可以参考https://blog.youkuaiyun.com/immerseinstudy/article/details/124072198
echo\
echo 正在安装pip环境...
echo 【1】自动下载安装(默认)
echo 【2】手动下载get-pip.py文件到pkg目录下
set /p pipFlag=(请选择安装方式...)
if not "%pipFlag%" == "2" (
curl https://bootstrap.pypa.io/get-pip.py -o "%head%\pkg\get-pip.py"
pause
) else (
echo 请确认您的文件夹下有get-pip.py文件,否则会报错。
pause
)
"%pythonenv%\python.exe" "%head%\pkg\get-pip.py"
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 off
echo\
echo XXX软件 -- 作者:XXX
echo\
echo ----------------------------------------
echo 嵌入式python环境安装中......
echo 【1】本地环境中需要先安装好WinRAR环境
echo ----------------------------------------
set head=%cd%
echo\
echo 环境检查中......
if exist %head%\venv (
echo 已经存在环境,如果您希望重新安装或修复环境,请删除该文件夹并重新执行本文件
pause
exit
)
if exist "D:\Program Files\WinRAR\winrar.exe" (
set localwinrar=D:\Program Files\WinRAR\winrar.exe
goto compressFileLine
) else (
echo 默认路径下没有winrar文件...
echo 请输入您电脑上的winrar可执行文件路径和名字
echo (如 C:\Program Files\WinRAR\winrar.exe)
set /p localwinrar=(如果没有winrar按回车手动解压):
)
echo\
if "%localwinrar%" == "" (
echo 请手动解压至%head%\venv\python该路径下后
pause
goto bulidPythonBaseLine
)
:compressFileLine
echo\
echo 正在解压缩所需的文件...
if exist %head%\pkg\python-3.8.5-embed-amd64.zip (
md %head%\venv
md %head%\venv\python
rem 测试代码,后续需要继续改进
"%localwinrar%" e -or "%head%\pkg\python-3.8.5-embed-amd64.zip" "%head%\venv\python"
) else (
echo 关键文件丢失,安装失败!!!
pause
exit
)
echo\
:bulidPythonBaseLine
echo\
echo 正在构建python包索引环境...
if exist %head%\venv\python (
echo\
) else (
echo 不存在有效的python路径
pause
exit
)
cd %head%\venv\python
set pythonenv=%head%\venv\python
rem 执行一条命令,将命令结果赋值给pythonVersion
rem for /f "delims=" %%t in ('命令字符串') do set str=%%t
for /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.6
setLocal EnableDelayedExpansion
if not "x!pythonVersion:%pyv310%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.10
echo 修改索引文件python310._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python310._pth
) else if not "x!pythonVersion:%pyv39%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.9
echo 修改索引文件python39._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python39._pth
) else if not "x!pythonVersion:%pyv38%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.8
echo 修改索引文件python38._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python38._pth
) else if not "x!pythonVersion:%pyv37%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.7
echo 修改索引文件python37._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python37._pth
) else if not "x!pythonVersion:%pyv36%=!"=="x%pythonVersion%" (
echo 当前索引环境为Python3.6
echo 修改索引文件python36._pth
%pythonenv%\python.exe %head%\pkg\update-pth.py python36._pth
) else (
echo 不支持的版本!!!,需要自己更新脚本
pause
exit
)
endlocal
echo\
echo\
echo 正在安装pip环境...
echo 【1】自动下载安装(默认)
echo 【2】手动下载get-pip.py文件到pkg目录下
set /p pipFlag=(请选择安装方式...)
if not "%pipFlag%" == "2" (
curl https://bootstrap.pypa.io/get-pip.py -o "%head%\pkg\get-pip.py"
pause
) else (
echo 请确认您的文件夹下有get-pip.py文件,否则会报错。
pause
)
"%pythonenv%\python.exe" "%head%\pkg\get-pip.py"
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