WindowsのポータブルPythonバンドル
他のユーザーが使用できるように Python アプリケーションとその環境を MS Windows 上にパッケージ化し、どのマシンでも「実行できる状態」にするのは、難しい作業です。このブログ投稿では、私の個人的な解決策について説明します。これは、私が Python for Windows Bundle と呼んでいるもので、仮想環境に似ていますが、マシン間で移植可能です。
Python バンドルは、仮想環境、通常の Python インストール、および PyInstaller や Py2exe などのツールで作成されたスタンドアロン実行可能ファイルによってもたらされる価値とトレードオフの交差点に位置します。
このようなバンドルを作成するために新しいツールは必要ありません。これは、フォルダー構造と手動で簡単に作成できるいくつかのラッパー スクリプトに関する、ゆるくて軽量な規則にすぎません。または、スクリプトまたは CI ジョブでの作成を自動化します。
質問
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>
次に、
<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 のラッパー スクリプトを使用します。
ファイル
<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
もちろん、リスクと結果はあります。ここで、私たちの仕事は、誰かがそのような「パッチが適用された」Scripts*.exe ファイルを実行するときに、正しい python.exe が PATH 変数に含まれていることを確認することです。このため、仮想環境と同様に、バンドルはユーザーによってアクティブ化される必要があります。これについては後で説明します。
(この pip ラッパーのアイデアの詳細については、ここを参照してください)
さて、pip ラッパー用の pip.exe もあれば良いと思いませんか?このようにすれば、将来的には pip コマンドだけを使用できるようになります (Python pip.py を使用する必要がなくなります)。作成しましょう。もちろん、移植性も必要なので、同様の方法で作成します。
このために、
<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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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