cmsimde <<
Previous Next >> Token and SSH
Portable Python
何謂可攜式 Python 程式環境?
Python 程式是如何執行的?
首先 Python 是一種解譯式 (Interpreted) 程式語言, 與 C 或 C++ 程式語言最大的差別是, C/C++ 程式碼通常必須透過編譯 (Compile) 與連結 (Link) 的過程, 將原始碼轉為可執行的格式 (在 Windows 操作系統為 .exe 檔案), 而 Python 程式寫好後, 可以直接利用解譯器執行, 使用者不需要手動執行程式碼的編譯, 而是由解譯器在執行前即時將程式碼轉換為可執行檔案.
在 geeksforgeeks 網站, 以下列敘述說明 Python 程式如何執行:
Python is an object-oriented programming language like Java. Python is called an interpreted language. Python uses code modules that are interchangeable instead of a single long list of instructions that was standard for functional programming languages. The standard implementation of python is called "cpython". It is the default and widely used implementation of Python.
Python doesn’t convert its code into machine code, something that hardware can understand. It actually converts it into something called byte code. So within python, compilation happens, but it’s just not into a machine language. It is into byte code (.pyc or .pyo) and this byte code can’t be understood by the CPU. So we need an interpreter called the python virtual machine to execute the byte codes
針對 Python 程式的"編譯"過程, 則說明如下:
The Python program is converted into byte code. Byte code is a fixed set of instructions that represent arithmetic, comparison, memory operations, etc. It can run on any operating system and hardware. The byte code instructions are created in the .pyc file. The .pyc file is not explicitly created as Python handles it internally but it can be viewed with the following command:
Y:\tmp\python_ex>python -m py_compile hello.py
-m and py_compile represent module and module name respectively. This module is responsible to generate .pyc file. The compiler creates a directory named __pycache__ where it stores the hello.cpython-39.pyc file (若採用 Python 3.9 版次的編譯器).
至於針對 Python 程式的"解譯"執行過程, 則說明如下:
The next step involves converting the byte code (.pyc file) into machine code. This step is necessary as the computer can understand only machine code (binary code). Python Virtual Machine (PVM) first understands the operating system and processor in the computer and then converts it into machine code. Further, these machine code instructions are executed by processor and the results are displayed.
However, the interpreter inside the PVM translates the program line by line thereby consuming a lot of time. To overcome this, a compiler known as Just In Time (JIT) is added to PVM. JIT compiler improves the execution speed of the Python program. This compiler is not used in all Python environments like CPython which is standard Python software.
To execute the hello.cpython-39.pyc we can use the following command:
Y:\tmp\python_ex>python __pycache__\hello.cpython-39.pyc
至於有關 python.exe 與 pythonw.exe 的差別, 則參見這裡的說明. 至於 SciTE 設定 python.properties 中, 使用 pythonw.exe -u 表示除了採非同步 (asynchronous) 執行模式外, 同時 force the stdout and stderr streams to be unbuffered; but has no effect on stdin.
Python 解譯器的類別:
最早的 Python 解譯器以 C 程式語言編寫, 稱為 CPython, 以 Python 編寫的 Python 解譯器稱為 Pypy, 以 .NET 技術編寫的 Python 解譯器稱為 Ironpython, 以 Java 編寫的 Python 解譯器稱為 Jython, 以 Javascript 編寫的 Python 解譯器稱為 Brython. 以 Rust 編寫的 Python 解譯器稱為 RustPython.
建立可攜 Python 程式環境的目的:
一般在 Windows 10 中使用 CPython 都是透過操作系統安裝, 將 CPython 解譯器登錄在操作系統的 Registry 中. 只不過配置在操作系統的 CPython 解譯器若在使用過程中, 透過 pip 安裝額外的模組後, 當電腦輔助設計室中的電腦重新開機後, 操作系統將會因為安裝防寫套件而恢復原先所安裝無額外模組的狀態.
網際內容管理與協同產品設計實習課程為了讓使用者可以隨身帶著 CPython 解譯器, 因此繞過 Windows 10 操作系統的 Registry 登錄, 設法以批次檔案在虛擬的硬碟 (y:) 啟動 CPython 解譯環境.
此外, 配置在 USB 隨身碟的可攜 CPython 程式環境, 除了可執行一般 Python 程式外, 也可自行安裝所需模組, 並用於 cmsimde 動態與靜態網站編輯.
可攜程式環境中除 CPython, 還可配置 MSYS2 C/C++ 編譯系統. 針對 SciTE, Solvespace, Range3, CoppeliaSim 等開源套件執行編譯.
如何建立可攜 Python 程式環境?
能放入 USB 隨身碟執行的 Python 程式環境包含兩個部分:
(1) Python 解譯器系統檔案
(2) 可攜啟動設定批次檔 (例如: start_ipv6.bat)
要在 Windows 操作系統中, 取得各版本的 Python 解譯器系統檔案, 也有兩種方法:
(1) 從官方網站下載安裝檔 (例如: 3.10.5 版的 python-3.10.5-amd64.exe), 手動安裝 Python, 取下安裝內容後, 解除安裝程式.
(2) 利用 gen_portable_python.py, 從 Python 官方網站下載基本的 .msi 檔案 (例如 3.10.5 版中的 core.msi, dev.msi, exe.msi, lib.msi, tcltk.msi 與 tools.msi), 然後利用 msiexec.exe 配合 targetdir 屬性解開各安裝檔.
以下將要結合 SciTE, Tiny C Compiler 與 Python 3.10.5, 建立一個可攜版的 CPython 與 ANSI C 執行環境.
- 從 http://download.savannah.gnu.org/releases/tinycc/ 下載 tcc-0.9.27-win64-bin.zip.
- 從 https://www.scintilla.org/SciTEDownload.html 下載 wscite521.zip.
- 利用 Python 3.9.5 (或先前的 Python3 舊版可攜程式) 執行 gen_portable_python.py 取得 Python310 解譯器系統檔案.
- 根據上述流程建立的基本 Python 與 ANSI C 可攜程式系統 Portable_py310_tcc.7z (只能在系網路 下載, 此一 Python 解譯器只帶有基本模組且尚未安裝 get-pip.py)
- 此一 Python 解譯器以 python get-pip.py 安裝 pip 後, 再以 pip install flask flask_cors bs4 lxml pelican markdown leo pyopenssl 安裝 cmsimde 所需模組後, 即可用於 wcm2022 動態與靜態系統的編輯.
- 此一 Python 解譯器再結合 Portablegit 與 PUTTY, 就可以支援以 SSH 執行 github 倉儲的 git push.
如何建立網際 Python 程式環境 (Brython)?
例如: Brython 頁面.
從 portable_python_wcm2022.7z 下載的可攜程式環境有哪些功能?
請注意: 以下的 .7z 檔案下載, 只允許在系上網段上下載.
- compile_copsim_cd2022.7z (file size: 5 GB, extracted size: 17.3 GB, 包含除了 NX1980 之外的所有課程相關可攜程式套件, 是專門為 cd2022 課程學員打造的套件).
- portable_python_wcm2022.7z (file size: 513 MB, extracted size: 2.3 G, 這是專門為 wcm2022 課程打造的可攜程式套件, 適合選修學員下載後在任何 Windows 10 中以隨身碟啟動後操作)
- drive.7z (file size: 2.6 MB, extracted size: 10 MB, 只包含 PUTTY, tcc, wscite 與 tmp 目錄, 採用 Hybrid 方式設定, 可與目前電腦輔助設計室中 SSD 硬碟所安裝的 Python 3.9.5 與 Portablegit 結合, 使用者只需自行設定啟動後的 home_ipv6 目錄與 home_ipv6/Desktop 目錄後即可以最輕薄便捷的方式將 SSH key 存入隨身碟, 並將個人與分組倉儲存入隨身碟啟動後的 tmp 目錄進行操作).
以下利用 Wink3 影片說明以 Hybrid 方式啟動的 USB 隨身碟如何建立? 以及使用上與完整 USB 隨身碟可攜程式系統的差別:
Hybrid 可攜程式系統是只將必要檔案配置到 USB 隨身碟, 其餘檔案則使用已經存在電腦上的內容, 主要包含 Python 3.9.5 解譯程式 (863 MB) 與 Portblegit 2.31.1 (285 MB).
Hybrid 可攜程式系統優點:
- 初始 USB 隨身碟只需複製 10.5 MB 的資料 (只自帶 PUTTY (4.3 MB), tcc (1.7 MB), tmp 與 wscite (4.3 MB)).
- 使用電腦 SSD 上所安裝的 Python 與 Portablegit, 執行速度會比一般 USB 隨身碟快.
Hybrid 可攜程式系統缺點:
- 在未修改 Python Script 目錄中的 .exe 可執行檔之前, 必須透過 .py 執行, 例如: 命令列 中輸入 leo 並無法執行執行, 必須採用 import leo.core.runLeo;leo.core.runLeo.run()
- 若在裝有還原卡的電腦, 未修改 Python 系統模組路徑之前, 所安裝的額外模組無法放入 USB 隨身碟中.
cmsimde <<
Previous Next >> Token and SSH