Heim >Backend-Entwicklung >Python-Tutorial >Tragbare Python -Bündel unter Windows
Verpacken Sie die Python -Anwendung und ihre Umgebung an MS Windows, damit andere Benutzer sie verwenden können, damit sie "jederzeit ausführen" kann, was eine schwierige Aufgabe ist. Dieser Blog -Artikel beschreibt meine persönliche Lösung: Ich nenne es die Windows -Version von Python Bundle , er ähnelt der virtuellen Umgebung, kann jedoch zwischen Maschinen transplantiert werden.
Python Bundle befindet sich in einer virtuellen Umgebung, einer konventionellen Python -Installation und einer unabhängigen ausführbaren Dateien, die von unabhängigen ausführbaren Dateien bereitgestellt werden, die von Tools wie PyInstaller oder PY2Exe erstellt wurden.
Erstellen eines solchen Bündels erfordert keine neuen Tools. Dies ist nur eine lockere und leichte Vereinbarung, für die Ordnerstruktur und einige Verpackungsskripte können Sie sie problemlos manuell erstellen. Oder automatisiert ihre Erstellung in Skripten oder CI -Operationen.
Wir wissen möglicherweise nicht, welche Version von Python, die wir installiert haben, oder es ist überhaupt nicht installiert. Wir wollen nie die Python -Installationen manipulieren, die sie möglicherweise bereits existieren, einschließlich nicht, dass sie nicht um die Installation zusätzlicher Python -Versionen bitten. Mit anderen Worten: Unser Softwarepaket sollte alles sein, was wir benötigen, um unsere Anwendung auszuführen oder unsere Python -Umgebung zu nutzen.
Das Problem der virtuellen Umgebung
Python -Installationsproblem
Es gibt jedoch einen großen Defekt: Die Existenz des Skripts kann die Datei ausführen (die .exe -Datei im Verzeichnis. Eine ausführbare Datei kann ausgeführt werden. Diese Skripte können ausführen, die Dateien ausführen können, die von dem Python -Installationspfad abhängen, der in seinem "selbst" schwer codiert ist.
Tools wie PyInstaller oder Py2exe können eine Python-Anwendung und alle ihre Abhängigkeiten in einem einzigen Paket bündeln. Benutzer müssen keinen Python-Interpreter oder andere Module installieren, um gepackte Anwendungen auszuführen.
Dies hat unsere Vertriebsanforderungen perfekt erfüllt. Der Nachteil besteht jedoch darin, dass wir keine vollständige Python-Umgebung, sondern ein benutzerdefiniertes, vereinfachtes Bundle-Format verteilen. Dies könnte das richtige Tool zum Verpacken Ihrer Anwendung sein. Dies gilt jedoch nicht, wenn wir unseren Benutzern beispielsweise ein „Starterkit“ einer Python-Umgebung senden möchten, die in einer IDE verwendet und mit zusätzlichen Pip-Installationen usw. erweitert werden kann. Wir suchen nach einer allgemeineren Lösung.
Wir beginnen in Powershell mit der Erstellung eines Ordners für unser Bundle:
<code>mkdir bundle cd bundle</code>
Dann fügen wir eine Python-Installation in
<code>curl.exe -L "https://www.nuget.org/api/v2/package/python/3.13.1" -o python3.zip Expand-Archive .\python3.zip -DestinationPath extracted_nuget move .\extracted_nuget\tools python3 rm -R extracted_nuget rm -R .\python3.zip</code>
Jetzt sieht unser Bundle so aus:
<code>bundle └───python3 ├───python3.exe ├───Lib/ ├───...</code>
Fügen wir auch ein Skriptverzeichnis hinzu:
<code>mkdir python3\Scripts</code>
Wir haben Pip noch nicht aktiviert, also machen wir das jetzt.
<code>python3\python.exe -m ensurepip</code>
Um das Problem zu lösen, dass pip .exe-Dateien im Skriptverzeichnis erstellt, die auf hartcodierten Python-Installationspfaden basieren, verwenden wir ein Wrapper-Skript für pip, das das Verhalten von pip korrigiert.
Lassen Sie uns eine Datei erstellen
<code>#!/usr/bin/python import sys import os if __name__ == "__main__": from pip._vendor.distlib.scripts import ScriptMaker ScriptMaker.executable = r"python.exe" from pip._internal.cli.main import main sys.exit(main())</code>
Wie funktioniert es? Immer wenn wir ein Paket über unser Wrapper-Skript installieren (z. B. python3python.exe pip_wrapperscriptspip.py
Natürlich gibt es Risiken und Konsequenzen. Unsere Aufgabe besteht nun darin, sicherzustellen, dass, wenn jemand eine solche „gepatchte“ Scripts*.exe-Datei ausführt, die richtige python.exe in der PATH-Variablen enthalten ist. Aus diesem Grund muss unser Bundle vom Benutzer aktiviert werden, ähnlich wie in einer virtuellen Umgebung. Wir werden das später besprechen.
(Weitere Informationen zu dieser Kernverpackungsidee finden Sie hier)
Wäre es nicht schön, wenn wir auch eine pip.exe für unseren Pip-Wrapper hätten? Auf diese Weise können wir in Zukunft nur noch Pip-Befehle verwenden (und müssen nicht Python pip.py verwenden)? Lassen Sie uns eines erstellen. Natürlich muss es auch portabel sein, weshalb wir es auf ähnliche Weise erstellen werden.
Dazu erstellen wir einen
<code>mkdir bundle cd bundle</code>
Dann verwenden wir Python3python.exe, um eine Python -Shell (repl) zu starten und den folgenden Code auszuführen, um PIP.Exe zu erstellen.
<code>curl.exe -L "https://www.nuget.org/api/v2/package/python/3.13.1" -o python3.zip Expand-Archive .\python3.zip -DestinationPath extracted_nuget move .\extracted_nuget\tools python3 rm -R extracted_nuget rm -R .\python3.zip</code>
Unsere Ordnerstruktur sollte jetzt wie folgt angezeigt werden:
<code>bundle └───python3 ├───python3.exe ├───Lib/ ├───...</code>
**Bundle** | **虚拟环境** | **Python安装** | **Pyinstaller** | |
**路径独立(可以复制到文件系统中的任何路径)?** | 是 | 否 (Python安装路径硬编码在虚拟环境中) | 否 (.\scripts\*.exe文件将中断) | 是 |
**可以在同一系统上有多个实例** | 是 | 是 | 没有问题 (概念是一个Python版本每个用户或系统一个Python安装) | 是 |
**磁盘使用情况** | 大 (包含完整的Python安装) | 小 (依赖于Python安装) | 大 | 中等 |
**需要激活** | 是 | 是 | 否 | 否 |
**单个可执行文件** | 否 | 否 | 否 | 是 |
**可以用作常规Python安装(REPL、pip、脚本等)** | 是 | 是 | 是 | 否 |
**可以与IDE一起使用?** | 是,但您可能需要在IDE的运行/调试配置文件中配置环境变量 | 是 | 是 | 否 |
Das obige ist der detaillierte Inhalt vonTragbare Python -Bündel unter Windows. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!