目次
質問
仮想環境の問題
Python のインストールに関する問題
PyInstaller に関する問題
Python バンドルをご紹介します!
バンドルを最初から作成する
比較
ホームページ バックエンド開発 Python チュートリアル WindowsのポータブルPythonバンドル

WindowsのポータブルPythonバンドル

Jan 26, 2025 pm 08:17 PM

他のユーザーが使用できるように Python アプリケーションとその環境を MS Windows 上にパッケージ化し、どのマシンでも「実行できる状態」にするのは、難しい作業です。このブログ投稿では、私の個人的な解決策について説明します。これは、私が Python for Windows Bundle と呼んでいるもので、仮想環境に似ていますが、マシン間で移植可能です。

Python バンドルは、仮想環境、通常の Python インストール、および PyInstaller や Py2exe などのツールで作成されたスタンドアロン実行可能ファイルによってもたらされる価値とトレードオフの交差点に位置します。

このようなバンドルを作成するために新しいツールは必要ありません。これは、フォルダー構造と手動で簡単に作成できるいくつかのラッパー スクリプトに関する、ゆるくて軽量な規則にすぎません。または、スクリプトまたは CI ジョブでの作成を自動化します。

Portable Python Bundles on Windows

質問

Python アプリケーションまたは環境を、自己完結型で「すぐに実行できる」方法でパッケージ化してユーザーに配信したいと仮定します。

ユーザーがどのバージョンの Python をインストールしているかわからない場合や、まったくインストールされていない場合があります。私たちは、彼らがすでに持っている Python インストールを改ざんすることを絶対に望んでいません。これには、追加の Python バージョンのインストールを要求させないことも含まれます。言い換えれば、パッケージには、ユーザーがアプリケーションを実行したり Python 環境を使用したりするために必要なものがすべて含まれている必要があります。

仮想環境の問題

ブレーンストーミングを行った後、仮想環境 (python -m venv venv_dir) を作成し、すべてを仮想環境にインストールし、仮想環境フォルダーを圧縮してユーザーに配布することを考えるかもしれません。ただし、仮想環境フォルダーは、それが作成された場所とは別のパスに簡単に再配置できないことを認識しています。さらに、仮想環境は、その作成に使用されたベースの Python インストールに依存しています (そのパスでまったく同じ Python バージョンを使用)。したがって、仮想環境のコピーをどこに配置するかをユーザーに指示する必要があります。そして、特定のバージョンの Python を特定のパスにインストールする必要があります。これは私たちが望んでいることではありません。

Python のインストールに関する問題

仮想環境の代わりに、すべての要件を通常の Python インストールにインストールし、そのフォルダー (例: c:Program FilesPython 3.13.1) を圧縮して配布できます。これはほとんど機能します。 Windows 上の Python インストール ディレクトリは、通常、別のパスに再配置できます (Unix では静的なプレフィックス パスがあるため、これは当てはまりませんが、それは別のトピックです)。

ただし、大きな欠陥があります。スクリプト実行可能ファイル (.Scripts ディレクトリ内の .exe ファイル。パッケージが単なるライブラリではなく、エントリ ポイントとしてスクリプトも提供する場合、通常は pip によって作成されます。このようなファイル)実行可能ファイルは pip.exe 自体です)。これらのスクリプト実行可能ファイルは、「それ自体」にハードコーディングされている Python インストール パスに依存します。

PyInstaller に関する問題

PyInstaller や Py2exe などのツールは、Python アプリケーションとそのすべての依存関係を 1 つのパッケージにバンドルできます。ユーザーは、パッケージ化されたアプリケーションを実行するために Python インタープリターやモジュールをインストールする必要はありません。

これにより、配布のニーズが完全に解決されました。ただし、トレードオフとして、完全な Python 環境を配布するのではなく、カスタムの簡素化されたバンドル形式を配布します。これは、アプリケーションをパッケージ化するのに最適なツールである可能性があります。ただし、たとえば、IDE で使用でき、追加の pip インストールなどで拡張できる「スターター キット」Python 環境をユーザーに送信する場合は、これは適用されません。私たちはより一般的な解決策を探しています。

Python バンドルをご紹介します!

バンドルを最初から作成する

Powershell でバンドル用のフォルダーを作成することから始めます:

<code>mkdir bundle
cd bundle</code>
ログイン後にコピー
ログイン後にコピー

次に、python3 に Python インストールを追加します。この例では、nuget パッケージから Python 3.13.1 をダウンロードして追加します。このパッケージは、CPython プロジェクトによって公式に保守されており、Python の「ポータブル」コピーとして使用できます。 (nuget zip ファイルでは、Python のインストールは tools ディレクトリにあります。ここで必要なのはこれだけです)。

<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>
ログイン後にコピー
ログイン後にコピー

バンドルは次のようになります:

<code>bundle
└───python3
    ├───python3.exe
    ├───Lib/
    ├───...</code>
ログイン後にコピー
ログイン後にコピー

Scripts ディレクトリも追加しましょう:

<code>mkdir python3\Scripts</code>
ログイン後にコピー

まだ pip を有効にしていないので、ここで有効にしましょう。

<code>python3\python.exe -m ensurepip</code>
ログイン後にコピー

ハードコーディングされた Python インストール パスに依存する Scripts ディレクトリに pip が .exe ファイルを作成する問題を解決するには、pip の動作にパッチを適用する pip のラッパー スクリプトを使用します。

ファイル python_wrapperscriptspip.py:

を作成しましょう
<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>
ログイン後にコピー

それはどのように機能しますか?ラッパー スクリプト (例: python3python.exe pip_wrapperscriptspip.py ) を介してパッケージをインストールするときは、python3Scripts 内のすべての .exe ファイルは、PATH 環境変数 (Python の代わりに) で見つかった python.exe を指すだけで使用されます。 .exe は、c:\program filesPython 3.13.1python.exe などのハードコードされたパスの下にあります)。

もちろん、リスクと結果はあります。ここで、私たちの仕事は、誰かがそのような「パッチが適用された」Scripts*.exe ファイルを実行するときに、正しい python.exe が PATH 変数に含まれていることを確認することです。このため、仮想環境と同様に、バンドルはユーザーによってアクティブ化される必要があります。これについては後で説明します。

(この pip ラッパーのアイデアの詳細については、ここを参照してください)

さて、pip ラッパー用の pip.exe もあれば良いと思いませんか?このようにすれば、将来的には pip コマンドだけを使用できるようになります (Python pip.py を使用する必要がなくなります)。作成しましょう。もちろん、移植性も必要なので、同様の方法で作成します。

このために、pip_wrapperbin フォルダーを作成し、その中に .exe ファイルを作成しましょう。

<code>mkdir bundle
cd bundle</code>
ログイン後にコピー
ログイン後にコピー

次に、python3python.exe を使用して Python シェル (REPL) を起動し、次のコードを実行して pip.exe を作成します。

<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>
ログイン後にコピー
ログイン後にコピー

フォルダー構造は次のようになります:

<code>bundle
└───python3
    ├───python3.exe
    ├───Lib/
    ├───...</code>
ログイン後にコピー
ログイン後にコピー

比較

**Bundle** **虚拟环境** **Python安装** **Pyinstaller**
**路径独立(可以复制到文件系统中的任何路径)?** 否 (Python安装路径硬编码在虚拟环境中) 否 (.\scripts\*.exe文件将中断)
**可以在同一系统上有多个实例** 没有问题 (概念是一个Python版本每个用户或系统一个Python安装)
**磁盘使用情况** 大 (包含完整的Python安装) 小 (依赖于Python安装) 中等
**需要激活**
**单个可执行文件**
**可以用作常规Python安装(REPL、pip、脚本等)**
**可以与IDE一起使用?** 是,但您可能需要在IDE的运行/调试配置文件中配置环境变量
ブラ

この出力は元のテキストを書き直したものですが、元のテキストの情報と画像はすべて保持されていることに注意してください。 より滑らかな表現を使用し、理解しやすいように一部の文章を再構成しました。 画像の形式は変更されません。

以上がWindowsのポータブルPythonバンドルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python vs. C:パフォーマンスと効率の探索 Python vs. C:パフォーマンスと効率の探索 Apr 18, 2025 am 12:20 AM

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか? Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか? Apr 27, 2025 am 12:03 AM

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

Pythonの学習:2時間の毎日の研究で十分ですか? Pythonの学習:2時間の毎日の研究で十分ですか? Apr 18, 2025 am 12:22 AM

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Python vs. C:重要な違​​いを理解します Python vs. C:重要な違​​いを理解します Apr 21, 2025 am 12:18 AM

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

Web開発用のPython:主要なアプリケーション Web開発用のPython:主要なアプリケーション Apr 18, 2025 am 12:20 AM

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

See all articles