這裡所謂的可攜 Python 系統, 是指能夠放入 USB 隨身碟中的 Python 解譯器. 整個過程分為三個部分. 包括 Python 核心程式, pip 以及安裝常用模組等過程.
動機
由於電腦輔助設計室中的電腦配置防寫系統, 大約每半年才更新一次, 為了及時配合不同課程所需,除了使用電腦操作系統中所安裝的 Python 外, 通常建議學員自行建立可直接放入 USB 隨身碟啟動的可攜 Python 解譯系統.
使用可攜 Python 解譯系統的好處是, 可以在任何的 64 位元 Windows 操作系統中使用相同配置的 Python 解譯器. 且可同時將 portable git 與 scite 納入可攜系統, 採可攜的方式執行程式編寫, 並維護電腦輔助設計流程中所建立 github 倉儲內容.
建立步驟
核心程式
已知從 https://www.python.org/ftp/python/ 可以下載各版本的 Python .msi 安裝檔案, 且所下載的 .msi 可以直接以 msiexec.exe 解開內容, 而不需要經過操作系統的套件安裝流程.
由於以下 Python 程式可以利用現有舊版的 Python 解譯器執行, 下載並解開最新版的 Python 可攜解譯器, 因此只要進入 cmd 命令視窗, 選擇所要配置 Portable Python 的目錄, 即可直接執行後完成第一階段的 Python 核心程式的配置.
這裡以 Python 3.10.6 為例, 下載並解開所需的 Python 核心程式內容:
import urllib.request import os # basic files for Python installation py_list = ["core", "dev", "exe", "lib", "tcltk", "tools"] # Python version version = "3.10.6" # location for Portable Python path = "c:\\tmp\\Python310" # Python msi download URL ftp = "https://www.python.org/ftp/python/" + version + "/amd64/" extract_path = path + "\\extract" # create directory try: os.mkdir(path) except: # path exists pass # get Python installation msi files and extract into target dir for i in py_list: filename = i + ".msi" url = ftp + filename # download basic python msi file urllib.request.urlretrieve(url, path+ "\\"+ filename) os.system("msiexec.exe /a " + path + "\\" + i + ".msi /qb targetdir=" + extract_path) # delete msi file os.remove(extract_path + "\\" + i + ".msi")
執行結束後, path (在上述範例 path 為 "c:/tmp/Python310") 目錄中的 extract 子目錄即為可攜 Python 解譯器檔案.
安裝 pip
從 https://bootstrap.pypa.io/get-pip.py 可以下載 get-pip.py 檔案, 利用前面完成的 Python 核心程式可以在可攜 Python 程式的架構下安裝 pip 工具, 但必須先讓可攜的核心程式得以運作, 這時需要安排 start.bat 與 stop.bat
安裝 pip 時, 先以 cmd 進入命令列視窗, 然後更換目錄至 get-pip.py 所在目錄後, 以 python get-pip.py 進行安裝.
Microsoft Windows [版本 10.0.19042.1706] (c) Microsoft Corporation. 著作權所有,並保留一切權利。 C:\tmp\portable_python_3.10.6>cd tmp C:\tmp\portable_python_3.10.6\tmp>python get-pip.py Collecting pip Downloading pip-22.2.2-py3-none-any.whl (2.0 MB) ---------------------------------------- 2.0/2.0 MB 1.5 MB/s eta 0:00:00 Collecting setuptools Downloading setuptools-65.2.0-py3-none-any.whl (1.2 MB) ---------------------------------------- 1.2/1.2 MB 2.7 MB/s eta 0:00:00 Collecting wheel Downloading wheel-0.37.1-py2.py3-none-any.whl (35 kB) Installing collected packages: wheel, setuptools, pip Successfully installed pip-22.2.2 setuptools-65.2.0 wheel-0.37.1
可攜 Python 安裝 pip 後, 就可以利用 pip list 列出目前所安裝的模組, 並接著安裝 cmsimde 所需模組.
C:\tmp\portable_python_3.10.6\tmp>pip list Package Version ---------- ------- pip 22.2.2 setuptools 65.2.0 wheel 0.37.1 C:\tmp\portable_python_3.10.6\tmp>pip install flask flask_cors bs4 lxml pelican markdown leo pyopenssl
以下為用來啟動可攜 Python 的批次檔案:
start.bat
@echo off set PATH=%cd% set HomePath=%cd%\home_ipv6 set HomeDrive=%cd%\home_ipv6 set Home=%cd%\home_ipv6 set USERPROFILE=%cd%\home_ipv6 REM 將系統 Python 程式的 io 設為 utf-8 set PYTHONIOENCODING="utf-8" set PYTHONPATH=%cd%\Python310\DLLs;%cd%\Python310\Lib;%cd%\Python310\Lib\site-packages; set PYTHONHOME=%cd%\Python310 REM for putty set GIT_SSH=%cd%\putty\plink.exe REM 設定跟 Python 有關的命令搜尋路徑 set path_python=%cd%\Python310;%cd%\Python310\Scripts; REM 設定跟Git 有關的命令搜尋路徑 set path_git=%cd%\portablegit_2.31.1\bin; set path_tcc=%cd%\tcc; REM for execute scite directly set path_scite=%cd%\wScite502\; path=%cd%;%path_python%;%path_git%;%path_tcc%;%path_scite%;%path%; start /MIN cmd.exe start /MIN cmd.exe start /MIN cmd.exe start /MIN cmd.exe start /MIN %cd%\wScite502\SciTE.exe start /MIN %cd%\wScite502\SciTE.exe Exit
以下為關閉可攜 Python 的批次檔:
stop.bat
@echo off taskkill /IM python.exe /F taskkill /IM pythonw.exe /F taskkill /IM scite.exe /F taskkill /IM cmd.exe /F EXIT
安裝模組
pip install flask flask_cors bs4 lxml pelican markdown leo pyopenssl
上述配置 pip 與模組安裝詳細過程紀錄.
下載 portable_python_3.10.6.7z (for @gm users only) / 下載 portable_python_3.10.6.7z for @nfu