之前覺得windows電腦安裝的python環境太亂太不純淨,或者臨時需要去別的辦公點快速運行python環境比較麻煩,因此了解了一下python嵌入式版本。上一期windows環境下安裝多個任意版本的python環境教大家如何搭建一個python嵌入式環境的幾個基本步驟。本期用腳本將他們串起來。
首先我的思路是,安裝python基本環境 + 添加python包索引路徑 + 配置pip + 用pip下載所需的第三方庫,最後運行測試。因此windows腳本就圍繞這幾個步驟展開。
文件夾設置與工程類似,pkg是用於安裝python環境的配置文件,src是源代碼,test是測試腳本存放路徑
5. 目錄結構:根目錄 ---
|--- pkg (python環境安裝包)
|--- src (源代碼存放路徑)
|---test (測試腳本存放路徑)
根據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\
python索引包路徑是由python*._pth
文件決定的,為了支持第三方庫索引和自己編寫代碼的索引。我們需要編寫一個python腳本修改這個python*._pth
文件。python腳本update-pth.py
import sys
with 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路徑
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 310
) else if not "x!pythonVersion:%pyv39%=!"=="x%pythonVersion%" (
echo 當前索引環境為Python3.9
rem 不知道為啥這裡有bug,有的時候必須要先開一下再關掉,否則沒法執行
rem @echo on
rem @echo off
set fileName=python39._pth
echo 修改索引文件%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 不支持的版本!!!
pause
exit
)
endlocal
echo\
使用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\
運行環境的方法如下,python.exe main.py。只不過添加了絕對路徑。注意bash腳本可以通過pwd獲取當前路徑,而bat腳本的當前路徑是存放在%cd%
變量中。
echo\
echo 運行測試用例...
md "%head%\test"
"%pythonenv%\python.exe" "%head%\src\main.py"
echo 運行成功
echo\
echo 恭喜 ^_^!! 環境搭建完成~~
有需要我會把完整的嵌入式壓縮包放上來,因為我目前還不知道怎麼上傳內容到csdn。。
@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.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\
: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 310
) else if not "x!pythonVersion:%pyv39%=!"=="x%pythonVersion%" (
echo 當前索引環境為Python3.9
rem 不知道為啥這裡有bug,有的時候必須要先開一下再關掉,否則沒法執行
rem @echo on
rem @echo off
set fileName=python39._pth
echo 修改索引文件%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 不支持的版本!!!
pause
exit
)
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