Maison  >  Article  >  développement back-end  >  L'artefact d'emballage de Python : Nuitka !

L'artefact d'emballage de Python : Nuitka !

WBOY
WBOYavant
2023-04-12 23:31:121977parcourir

L'artefact d'emballage de Python : Nuitka !

1. Expérience de l'utilisation de pyinstaller et Nuitka

1.1 Exigences d'utilisation

Cette fois, c'est aussi en raison des besoins du projet, je dois convertir le code python en un programme exe Après avoir recherché. Pendant longtemps, j'ai trouvé 2 programmes Tools qui peuvent empaqueter des projets Python-pyintaller et nuitka.

Ces deux outils peuvent répondre aux besoins du projet à la fois :

  • Cacher le code source. Le pyinstaller ici crypte le code source en définissant la clé ; tandis que nuitka convertit le code source python en C++ (ce que vous obtenez ici est un fichier pyd binaire, empêchant la décompilation), puis le compile en un fichier exécutable.
  • Facile à transplanter. Il est pratique à utiliser pour les utilisateurs et il n'est pas nécessaire d'installer Python, des packages tiers ou autres.

1.2 Expérience d'utilisation

Le plus grand sentiment après avoir utilisé ces deux outils est :

  • l'expérience de pyinstaller est très mauvaise !
  • L'exe converti en projet d'apprentissage en profondeur fait près de 3G (pyinstaller regroupe l'ensemble de l'environnement d'exécution), oui, vous avez bien entendu, un EXE a 3 A G !
  • Le packaging est super lent et le démarrage est super lent.
  • nuitka sent trop bon !
  • Pour le même projet, l'exe généré ne fait que 7M !

  • Le packaging est super rapide (en 1 minute) et le démarrage est super rapide.

2. Installation et utilisation de Nuitka

2.1 Installation de nuitka

  • Vous pouvez l'installer directement en utilisant pip : <span style="font-size: 15px;">pip install Nuitka</span>
  • Téléchargez vs2019 (MSVS) ou MinGW64, ce sont de toute façon des compilateurs C++, téléchargez-les simplement.

2.2 Processus d'utilisation

Pour les projets avec de nombreux packages dépendants de tiers (comme la nécessité d'importer torch, tensorflow, cv2, numpy, pandas, geopy, etc.), la meilleure façon de packager ici est Convertissez uniquement votre propre code en C++, quels que soient ces gros packages tiers !

Ce qui suit est une structure de répertoires de ma démo (l'interface écrite par le framework pytq5 est utilisée ici) :

├─utils//源码1文件夹├─src//源码2文件夹├─logo.ico//demo的图标└─demo.py//main文件

Utilisez la commande suivante (débogage) pour générer directement le fichier exe :

nuitka --standalone --show-memory --show-progress --nofollow-imports --plugin-enable=qt-plugins --follow-import-to=utils,src --output-dir=out --windows-icon-from-ico=./logo.ico demo.py

Voici une brève introduction à ma commande nuitka ci-dessus :

  • <span style="font-size: 15px;">--standalone</span>:方便移植到其他机器,不用再安装python
  • <span style="font-size: 15px;">--show-memory --show-progress</span>:展示整个安装的进度过程
  • <span style="font-size: 15px;">--nofollow-imports</span>:不编译代码中所有的import,比如keras,numpy之类的。
  • <span style="font-size: 15px;">--plugin-enable=qt-plugins</span>:我这里用到pyqt5来做界面的,这里nuitka有其对应的插件。
  • <span style="font-size: 15px;">--follow-import-to=utils,src</span>:需要编译成C++代码的指定的2个包含源码的文件夹,这里用<span style="font-size: 15px;">,</span>来进行分隔。
  • <span style="font-size: 15px;">--output-dir=out</span>:指定输出的结果路径为out。
  • <span style="font-size: 15px;">--windows-icon-from-ico=./logo.ico</span>:指定生成的exe的图标为logo.ico这个图标,这里推荐一个将图片转成ico格式文件的网站(比特虫)。
  • <span style="font-size: 15px;">--windows-disable-console</span>:运行exe取消弹框。这里没有放上去是因为我们还需要调试,可能哪里还有问题之类的。

经过1min的编译之后,你就能在你的目录下看到:

├─utils//源码1文件夹├─src//源码2文件夹├─out//生成的exe文件夹├─demo.build 
└─demo.dist └─demo.exe//生成的exe文件├─logo.ico//demo的图标└─demo.py//main文件

当然这里你会发现真正运行exe的时候,会报错:​<span style="font-size: 15px;">no module named torch,cv2,tensorflow</span>​等等这些没有转成C++的第三方包。

这里需要找到这些包(我的是在softwarepython3.7Libsite-packages下)复制(比如numpy,cv2这个文件夹)到​<span style="font-size: 15px;">demo.dist</span>​路径下。

至此,exe能完美运行啦!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer