Jadual Kandungan
Nuitka boleh digunakan dengan Python 2.6 hingga 2.7 dan Python 3.3 hingga 3.10. Ia boleh menyusun binari untuk Microsoft Windows, macOS, Linux dan FreeBSD/NetBSD. Adalah penting untuk ambil perhatian bahawa pembangun mesti membina binari pada platform sasaran adalah tidak mungkin.
Selepas memasang Nuitka, gunakan Nuitka atau python-m nuitka untuk memanggilnya.
Secara lalai, Nuitka hanya menyusun modul tertentu. Jika modul mempunyai import dari tempat lain dalam program, daripada pustaka standard, atau daripada pakej pihak ketiga, anda perlu menentukan bahawa import ini juga harus disusun.
编译Python程序进行重新分发
Rumah pembangunan bahagian belakang Tutorial Python Pengenalan kepada Nuitka: Cara yang lebih baik untuk menyusun dan mengedarkan Python

Pengenalan kepada Nuitka: Cara yang lebih baik untuk menyusun dan mengedarkan Python

Apr 13, 2023 pm 12:55 PM
python membangun nuitka

Penterjemah |. Li Rui

Pengulas |. Di satu pihak, menulis aplikasi Python dan mengedarkannya kepada orang yang tidak memasang Python boleh menjadi sangat sukar.

Cara paling biasa untuk menyelesaikan masalah ini ialah membungkus atur cara dengan semua perpustakaan dan fail sokongannya serta masa jalan Python. Terdapat alat yang boleh melakukan ini, seperti PyInstaller, tetapi mereka memerlukan banyak caching untuk berfungsi dengan betul. Lebih-lebih lagi, selalunya mungkin untuk mengekstrak kod sumber program Python daripada pakej yang dihasilkan. Dalam sesetengah kes, ini boleh menjadi pemecah perjanjian.

Projek pihak ketiga Nuitka menawarkan penyelesaian radikal. Ia menyusun atur cara Python ke dalam binari C - bukan dengan membungkus masa jalan CPython dengan kod byte program, tetapi dengan menterjemah arahan Python ke dalam C. Hasilnya boleh diedarkan dalam pakej termampat atau dibungkus ke dalam pemasang dengan produk pihak ketiga yang lain.

Nuitka juga cuba mengekalkan keserasian maksimum dengan ekosistem Python, jadi perpustakaan pihak ketiga seperti NumPy boleh berfungsi dengan pasti. Nuitka juga membuat peningkatan prestasi untuk menyusun atur cara Python di mana mungkin, tetapi sekali lagi tanpa mengorbankan keserasian keseluruhan. Kelajuan tidak dijamin, jadi ia berbeza secara meluas antara beban kerja dan sesetengah program mungkin tidak mengalami peningkatan prestasi yang ketara. Secara umum, sebaiknya jangan bergantung pada Nuitka untuk prestasi, tetapi sebagai penyelesaian yang digabungkan.

Pasang Nuitka

Nuitka boleh digunakan dengan Python 2.6 hingga 2.7 dan Python 3.3 hingga 3.10. Ia boleh menyusun binari untuk Microsoft Windows, macOS, Linux dan FreeBSD/NetBSD. Adalah penting untuk ambil perhatian bahawa pembangun mesti membina binari pada platform sasaran adalah tidak mungkin.

Untuk setiap platform, sebagai tambahan kepada masa jalan Python, pengkompil C diperlukan. Pada Microsoft Windows, Visual Studio 2022 atau lebih tinggi disyorkan, tetapi MinGW-w64 C11 (gcc 11.2 atau lebih tinggi) juga boleh digunakan. Untuk platform lain, anda boleh menggunakan gcc 5.1 atau lebih tinggi, g++4.4 atau lebih tinggi, clang atau clang cl pada Windows di bawah Visual Studio.

Adalah penting untuk ambil perhatian bahawa jika menggunakan Python 3.3 atau Python 3.4, Python 2.7 akan diperlukan kerana kebergantungan alat. Semua ini sepatutnya menjadi sebab untuk menggunakan versi terkini Python jika anda boleh.

Adalah yang terbaik untuk memasang Nuitka dalam persekitaran maya bersama-sama dengan projek anda sebagai kebergantungan pembangunan dan bukannya kebergantungan pengedaran. Nuitka sendiri tidak digabungkan dengan atau digunakan oleh projek;

Menggunakan Nuitka buat kali pertama

Selepas memasang Nuitka, gunakan Nuitka atau python-m nuitka untuk memanggilnya.

Perkara pertama yang ingin dilakukan oleh pembangun dengan Nuitka adalah untuk mengesahkan bahawa keseluruhan rantai alat berfungsi dengan baik, termasuk pengkompil C. Untuk menguji ini, anda boleh menyusun atur cara Python "Hello world" mudah, namakannya main.py:

print ("Hello world")
Salin selepas log masuk
Apabila menyusun atur cara Python menggunakan Nuitka, entri The name of modul titik diserahkan kepada Nuitka sebagai hujah, contohnya Nuitka main.py. Apabila dipanggil seperti ini, Nuitka akan menerima main.py dan membina boleh laku daripadanya.

Perlu diambil perhatian bahawa kerana kami hanya menguji kefungsian Nuitka, ia hanya akan menyusun fail Python ke dalam fail boleh laku. Ia tidak menyusun apa-apa lagi, dan tidak juga menggabungkan apa-apa untuk pengagihan semula. Tetapi menyusun fail sepatutnya cukup untuk menentukan sama ada rantai alat Nuitka disediakan dengan betul.

Selepas penyusunan selesai, anda akan melihat fail boleh laku binari yang terletak dalam direktori yang sama dengan program Python. Jalankan boleh laku untuk memastikan ia berfungsi dengan betul.

Ia juga mungkin untuk menjalankan aplikasi yang disusun Nuitka secara automatik dengan menghantar --run sebagai bendera baris arahan.

Jika ujian boleh laku "Hello world" berfungsi, anda boleh cuba membungkusnya sebagai fail boleh diedarkan semula. Proses ini dijelaskan di bawah.

Adalah penting untuk ambil perhatian bahawa apabila menjalankan kompilasi ujian pertama menggunakan Nuitka, ia mungkin mengambil masa beberapa saat untuk diselesaikan. Dan ini hanya menyusun satu modul, bukan keseluruhan program. Menyusun program lengkap dengan Nuitka boleh mengambil masa beberapa minit atau lebih lama, bergantung pada bilangan modul yang digunakan oleh program tersebut.

Gunakan Nuitka untuk menyusun atur cara Python

Secara lalai, Nuitka hanya menyusun modul tertentu. Jika modul mempunyai import dari tempat lain dalam program, daripada pustaka standard, atau daripada pakej pihak ketiga, anda perlu menentukan bahawa import ini juga harus disusun.

Pertimbangkan program "Hello world" yang diubah suai dengan modul bersebelahan dipanggil greet.py:

def greet(name):
print ("Hello ", name)
Salin selepas log masuk
dan diubah suai utama:

import greet
greet.greet("world")
Salin selepas log masuk
Untuk menyusun dua modul ini, anda boleh menggunakan suis --follow-imports:

nuitka --follow-imports main.py
Salin selepas log masuk
Suis ini Memastikan semua import diperlukan oleh keseluruhan program dijejaki daripada penyata import dan disusun bersama.

Pilihan lain --nofollow-import-to membenarkan untuk mengecualikan subdirektori tertentu daripada proses import. Pilihan ini berguna untuk menapis suite ujian atau modul yang anda tahu tidak pernah digunakan. Ia juga membenarkan kad bebas disediakan sebagai parameter.

Pengenalan kepada Nuitka: Cara yang lebih baik untuk menyusun dan mengedarkan Python

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

(1)包括动态导入

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

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

nuitka--follow-imports--include-plugin-directory=modsmain.py
Salin selepas log masuk

(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
Salin selepas log masuk

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

nuitka --include-package=mypackage --include-package-data=mypackage main.py
Salin selepas log masuk

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

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

nuitka --include-module=mypackage.mymodule main.py
Salin selepas log masuk

该命令告诉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

Atas ialah kandungan terperinci Pengenalan kepada Nuitka: Cara yang lebih baik untuk menyusun dan mengedarkan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengintegrasikan perkhidmatan Node.js atau Python dengan cekap di bawah seni bina lampu? Bagaimana untuk mengintegrasikan perkhidmatan Node.js atau Python dengan cekap di bawah seni bina lampu? Apr 01, 2025 pm 02:48 PM

Ramai pemaju laman web menghadapi masalah mengintegrasikan perkhidmatan node.js atau python di bawah seni bina lampu: lampu sedia ada (Linux Apache MySQL PHP) Laman web seni bina memerlukan ...

Apakah sebabnya mengapa fail penyimpanan berterusan saluran paip tidak dapat ditulis apabila menggunakan crawler scapy? Apakah sebabnya mengapa fail penyimpanan berterusan saluran paip tidak dapat ditulis apabila menggunakan crawler scapy? Apr 01, 2025 pm 04:03 PM

Apabila menggunakan crawler scapy, sebab mengapa fail penyimpanan berterusan paip tidak boleh ditulis? Perbincangan Ketika belajar menggunakan Crawler Scapy untuk Crawler Data, anda sering menemui ...

Apakah sebabnya mengapa Pool Proses Python mengendalikan permintaan TCP serentak dan menyebabkan pelanggan terjebak? Apakah sebabnya mengapa Pool Proses Python mengendalikan permintaan TCP serentak dan menyebabkan pelanggan terjebak? Apr 01, 2025 pm 04:09 PM

Proses Python Pool mengendalikan permintaan TCP serentak yang menyebabkan pelanggan terjebak. Apabila menggunakan Python untuk pengaturcaraan rangkaian, adalah penting untuk mengendalikan permintaan TCP serentak dengan cekap. …

Bagaimana untuk melihat fungsi asal yang terkandung secara dalaman oleh python funcools.partial Object? Bagaimana untuk melihat fungsi asal yang terkandung secara dalaman oleh python funcools.partial Object? Apr 01, 2025 pm 04:15 PM

Sangat meneroka kaedah tontonan python funcools.partial Object in Funcools.Partial Menggunakan Python ...

Pembangunan Aplikasi Desktop Cross-Platform Python: Perpustakaan GUI mana yang terbaik untuk anda? Pembangunan Aplikasi Desktop Cross-Platform Python: Perpustakaan GUI mana yang terbaik untuk anda? Apr 01, 2025 pm 05:24 PM

Pilihan Perpustakaan Pembangunan Aplikasi Desktop Python Python Banyak pemaju Python ingin membangunkan aplikasi desktop yang boleh dijalankan pada kedua-dua sistem Windows dan Linux ...

Python Hourglass Graph Lukisan: Bagaimana untuk mengelakkan kesilapan yang tidak ditentukan? Python Hourglass Graph Lukisan: Bagaimana untuk mengelakkan kesilapan yang tidak ditentukan? Apr 01, 2025 pm 06:27 PM

Bermula dengan Python: Lukisan Grafik Hourglass dan Pengesahan Input Artikel ini akan menyelesaikan masalah definisi berubah -ubah yang dihadapi oleh pemula python dalam program lukisan grafik Hourglass. Kod ...

Bagaimana cara mengira dan menyusun set data produk yang besar di Python? Bagaimana cara mengira dan menyusun set data produk yang besar di Python? Apr 01, 2025 pm 08:03 PM

Penukaran dan Statistik Data: Pemprosesan yang cekap bagi set data besar Artikel ini akan memperkenalkan secara terperinci bagaimana untuk menukar senarai data yang mengandungi maklumat produk kepada yang lain yang mengandungi ...

Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Apr 01, 2025 pm 05:09 PM

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

See all articles