検索
ホームページバックエンド開発Python チュートリアルNuitka の紹介: Python をコンパイルして配布するためのより良い方法

翻訳者 | Li Rui

レビュアー | Sun Shujuan

Python の人気が高まるにつれて、その限界がますます明らかになってきました。一方で、Python アプリケーションを作成して、Python がインストールされていない人に配布するのは非常に難しい場合があります。

この問題を解決する最も一般的な方法は、サポートされているすべてのライブラリとファイル、および Python ランタイムを含むプログラムをパッケージ化することです。 PyInstaller など、これを実行できるツールはありますが、適切に動作するには大量のキャッシュが必要です。さらに、多くの場合、生成されたパッケージから Python プログラムのソース コードを抽出できます。場合によっては、これが取引の妨げとなる可能性があります。

サードパーティ プロジェクト Nuitka は根本的なソリューションを提供します。 CPython ランタイムをプログラムのバイトコードとともにパッケージ化するのではなく、Python 命令を C に変換することによって、Python プログラムを C バイナリにコンパイルします。結果は、圧縮パッケージで配布したり、他のサードパーティ製品とともにインストーラーにパッケージ化したりできます。

Nuitka は、Python エコシステムとの互換性を最大限に維持しようとするため、NumPy などのサードパーティ ライブラリも確実に動作します。 Nuitka はまた、可能な限り、コンパイルされた Python プログラムのパフォーマンスを向上させますが、これも全体的な互換性を犠牲にすることはありません。高速化は保証されていないため、ワークロードによって大きく異なり、一部のプログラムでは大幅なパフォーマンスの向上が見られない場合があります。一般に、パフォーマンスに関しては Nuitka に依存せず、バンドルされたソリューションとして依存することが最善です。

Nuitka のインストール

Nuitka は Python 2.6 ~ 2.7 および Python 3.3 ~ 3.10 で使用できます。 Microsoft Windows、macOS、Linux、FreeBSD/NetBSD 用のバイナリをコンパイルできます。開発者はターゲット プラットフォーム上でバイナリをビルドする必要があり、クロスコンパイルは不可能であることに注意することが重要です。

各プラットフォームでは、Python ランタイムに加えて、C コンパイラも必要です。 Microsoft Windows では、Visual Studio 2022 以降を推奨しますが、MinGW-w64 C11 (gcc 11.2 以降) も使用できます。他のプラットフォームの場合は、Windows の Visual Studio で gcc 5.1 以降、g 4.4 以降、clang または Clang cl を使用できます。

Python 3.3 または Python 3.4 を使用する場合は、ツールの依存関係により Python 2.7 が必要になることに注意してください。これらすべてが、可能であれば最新バージョンの Python を使用する理由になります。

Nuitka は、配布の依存関係ではなく開発の依存関係として、プロジェクトとともに仮想環境にインストールするのが最善です。 Nuitka 自体はプロジェクトにバンドルされたり、プロジェクトによって使用されたりするのではなく、バンドルを実行します。

Nuitka を初めて使用する

Nuitka をインストールした後、Nuitka または python-m nuitka を使用して Nuitka を呼び出します。

開発者が Nuitka を使用して最初に行いたいことは、C コンパイラーを含むツール チェーン全体が適切に動作していることを確認することです。これをテストするには、単純な「Hello world」Python プログラムをコンパイルし、main.py という名前を付けます。

print ("Hello world")

Nuitka を使用して Python プログラムをコンパイルするときは、エントリ ポイント モジュールの名前を変更します。パラメータとして Nuitka に渡されます (例: Nuitka main.py)。このように呼び出すと、Nuitka は main.py を受け取り、そこから実行可能ファイルをビルドします。

Nuitka の機能をテストしているだけであるため、Python ファイルを実行可能ファイルにコンパイルするだけであることに注意してください。それ以外には何もコンパイルしませんし、再配布のために何かをバンドルすることもありません。ただし、Nuitka のツールチェーンが正しく設定されているかどうかを判断するには、ファイルをコンパイルするだけで十分です。

コンパイルが完了すると、Python プログラムと同じディレクトリにバイナリ実行可能ファイルが表示されるはずです。実行可能ファイルを実行して、正しく動作することを確認します。

--run をコマンドライン フラグとして渡すことで、Nuitka でコンパイルされたアプリケーションを自動的に実行することもできます。

「Hello world」テスト実行可能ファイルが有効な場合は、それを再配布可能ファイルとしてパッケージ化してみることができます。このプロセスについては以下で説明します。

Nuitka を使用して最初のテスト コンパイルを実行する場合、完了までに数秒かかる場合があることに注意することが重要です。また、これはプログラム全体ではなく、1 つのモジュールのみをコンパイルします。 Nuitka を使用して完全なプログラムをコンパイルするには、プログラムで使用されるモジュールの数に応じて、数分以上かかる場合があります。

Nuitka を使用して Python プログラムをコンパイルする

デフォルトでは、Nuitka は指定されたモジュールのみをコンパイルします。モジュールにプログラム内の他の場所、標準ライブラリ、またはサードパーティのパッケージからのインポートがある場合、これらのインポートもコンパイルするように指定する必要があります。

greet.py:

def greet(name):
print ("Hello ", name)

という名前の隣接モジュールと、変更された main.py:

rrree を持つ、変更された「Hello world」プログラムを考えてみましょう。

これら 2 つのモジュールをコンパイルするには、--follow-imports スイッチを使用できます。

import greet
greet.greet("world")

このスイッチにより、プログラム全体が必要とするすべてのインポートが、 import ステートメントを作成し、一緒にコンパイルします。

別のオプション --nofollow-import-to を使用すると、インポート プロセスから特定のサブディレクトリを除外できます。このオプションは、一度も使用されていないことがわかっているテスト スイートまたはモジュールを除外するのに役立ちます。ワイルドカードをパラメータとして指定することもできます。

Nuitka の紹介: Python をコンパイルして配布するためのより良い方法

图1.使用Nuitka编译大型复杂程序。这个示例涉及编译Pyglet模块以及标准库中的许多模块,这需要几分钟的时间

(1)包括动态导入  

现在出现了Python用户在尝试打包Python应用程序以进行分发时经常遇到的问题之一。--follow-imports选项仅遵循通过import语句在代码中显式声明的导入。它不处理动态导入。  

为了解决这个问题,可以使用--include-plugin-directory开关为动态导入的模块提供一个或多个路径。例如,对于包含动态导入代码的名为mods的目录,可以使用:  

nuitka--follow-imports--include-plugin-directory=modsmain.py

(2)包括数据文件和目录  

如果Python程序使用在运行时加载的数据文件,Nuitka也无法自动检测这些文件。要将单个文件和目录包含在Nuitka打包程序中,可能使用--include-data-files和--include-data-dir。  

--include-data-files允许为要复制的文件指定通配符以及要将它们复制到的位置。例如,--include-data dir=/path/to/data=data会将/path.to/data中的所有内容复制到分发目录中的匹配目录数据。

-include-data-dir的工作方式大致相同,只是它不使用通配符;它只允许传递要复制的路径和要将其复制到的分发文件夹中的目标。例如,--include-data dir=/path/to/data=data会将/path.to/data中的所有内容复制到分发目录中的匹配目录数据。

(3)包括Python包和模块  

指定导入的另一种方法是使用Python样式的包命名空间而不是文件路径,使用--include-package选项。例如,以下命令将包括mypackage,它在磁盘上的任何位置(假设Python可以找到它),以及它下面的所有内容:  

nuitka --include-package=mypackage main.py

如果包需要自己的数据文件,可以使用--include-package-data选项包含这些文件:  

nuitka --include-package=mypackage --include-package-data=mypackage main.py

该命令告诉Nuitka获取包目录中实际上不是代码的所有文件。  

如果只想包含单个模块,可以使用--include-module:  

nuitka --include-module=mypackage.mymodule main.py

该命令告诉Nuitka只包含mypackage.mymodule,而不包含其他内容。  

编译Python程序进行重新分发

当想用Nuitka编译Python程序以进行重新分发时,可以使用命令行开关--standalone来处理大部分工作。此开关自动跟随所有导入并生成一个dist文件夹,其中包含已编译的可执行文件和所需的任何支持文件。要重新分发程序,只需要复制此目录即可。  

不要指望--standalone的程序在第一次运行时就可以工作。Python程序的一般动态性几乎保证了需要使用上述其他一些选项来确保编译的程序正常运行。例如,如果有一个需要特定字体的GUI应用程序,可能必须使用--include-data-files或--include-data-dir将它们复制到发行版中。  

此外,如上所述,--standalone应用程序的编译时间可能比测试编译长得多。一旦对测试独立构建的应用程序需要多长时间有所了解,就为测试独立构建的应用程序所需的构建时间进行预算。

最后,Nuitka提供了另一个构建选项--onefile。对于那些熟悉PyInstaller的人来说,--onefile的工作方式与该程序中的相同选项相同:它将整个应用程序(包括其所有依赖文件)压缩为单个可执行文件,无需重新分发其他文件。但是,重要的是要知道--onefile在Linux和Microsoft Windows上的工作方式不同。在Linux上,它使用存档的内容安装一个虚拟文件系统。在Windows上,它会将文件解压缩到一个临时目录中并从那里运行它们,它必须为程序的每次运行执行这一操作。在Windows上使用--onefile可能会显著降低启动程序所需的时间。

原文标题:Intro to Nuitka: A better way to compile and distribute Python,作者:Serdar Yegulalp

以上がNuitka の紹介: Python をコンパイルして配布するためのより良い方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Pythonの学習:2時間の毎日の研究で十分ですか?Pythonの学習:2時間の毎日の研究で十分ですか?Apr 18, 2025 am 12:22 AM

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。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。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

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

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

Python in Action:実世界の例Python in Action:実世界の例Apr 18, 2025 am 12:18 AM

Pythonの実際のアプリケーションには、データ分析、Web開発、人工知能、自動化が含まれます。 1)データ分析では、PythonはPandasとMatplotlibを使用してデータを処理および視覚化します。 2)Web開発では、DjangoおよびFlask FrameworksがWebアプリケーションの作成を簡素化します。 3)人工知能の分野では、TensorflowとPytorchがモデルの構築と訓練に使用されます。 4)自動化に関しては、ファイルのコピーなどのタスクにPythonスクリプトを使用できます。

Pythonの主な用途:包括的な概要Pythonの主な用途:包括的な概要Apr 18, 2025 am 12:18 AM

Pythonは、データサイエンス、Web開発、自動化スクリプトフィールドで広く使用されています。 1)データサイエンスでは、PythonはNumpyやPandasなどのライブラリを介してデータ処理と分析を簡素化します。 2)Web開発では、DjangoおよびFlask Frameworksにより、開発者はアプリケーションを迅速に構築できます。 3)自動化されたスクリプトでは、Pythonのシンプルさと標準ライブラリが理想的になります。

Pythonの主な目的:柔軟性と使いやすさPythonの主な目的:柔軟性と使いやすさApr 17, 2025 am 12:14 AM

Pythonの柔軟性は、マルチパラダイムサポートと動的タイプシステムに反映されていますが、使いやすさはシンプルな構文とリッチ標準ライブラリに由来しています。 1。柔軟性:オブジェクト指向、機能的および手続き的プログラミングをサポートし、動的タイプシステムは開発効率を向上させます。 2。使いやすさ:文法は自然言語に近く、標準的なライブラリは幅広い機能をカバーし、開発プロセスを簡素化します。

Python:汎用性の高いプログラミングの力Python:汎用性の高いプログラミングの力Apr 17, 2025 am 12:09 AM

Pythonは、初心者から上級開発者までのすべてのニーズに適した、そのシンプルさとパワーに非常に好まれています。その汎用性は、次のことに反映されています。1)学習と使用が簡単、シンプルな構文。 2)Numpy、Pandasなどの豊富なライブラリとフレームワーク。 3)さまざまなオペレーティングシステムで実行できるクロスプラットフォームサポート。 4)作業効率を向上させるためのスクリプトおよび自動化タスクに適しています。

1日2時間でPythonを学ぶ:実用的なガイド1日2時間でPythonを学ぶ:実用的なガイドApr 17, 2025 am 12:05 AM

はい、1日2時間でPythonを学びます。 1.合理的な学習計画を作成します。2。適切な学習リソースを選択します。3。実践を通じて学んだ知識を統合します。これらの手順は、短時間でPythonをマスターするのに役立ちます。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境