Eh bien, j'ai un paquet Python. Je dois le compiler en tant que dll avant de le distribuer de manière facilement importable. Comment? Vous pouvez suggérer que *.pyc
. Mais je lis quelque part que n'importe quel *.pyc
peut être facilement décompilé!
Mise à jour: Suivez ces instructions:
1) J'ai écrit un paquet python
2) veux le distribuer
3) NE veulent PAS distribuer la source
4) * .pyc est décompilable >> la source peut être extraite!
5) dll est standard
Ecrivez tout ce que vous voulez cacher en Cython et compilez-le en pyd
C'est aussi proche que possible de la création de code python compilé.
En outre, la DLL n'est pas un standard, pas dans le monde Python. Ils ne sont pas portables non plus.
Vous pouvez intégrer du python dans C . Le vrai truc consiste à convertir entre les valeurs C et les valeurs Python. Cependant, une fois que vous avez terminé, créer une DLL est assez simple .
Cependant, pourquoi avez-vous besoin de créer une dll? Avez-vous besoin de l'utiliser depuis un programme non-python?
Vous pouvez utiliser py2exe.org pour convertir les scripts python en exécutables Windows. Certes, cela ne fonctionnera que sous Windows, mais c'est mieux que rien.
Je voudrais aussi utiliser Cython pour générer des fichiers pyd
, comme Dikei l’a écrit. Mais si vous voulez vraiment sécuriser votre code, mieux vaut écrire les éléments importants en C++. Le mieux serait de combiner C++ et Python. L'idée: vous laisseriez le code python ouvert pour des ajustements, de sorte que vous n'ayez pas à tout compiler encore et encore. Cela signifie que vous écririez le "noyau" en C++ (qui est la solution la plus sécurisée de nos jours) et utilisiez ces fichiers dll
dans votre code python. Cela dépend vraiment du type d’outil ou de programme que vous construisez et de la façon dont vous voulez l’exécuter. Je crée principalement un fichier d'exécution (exe
, app
) une fois que je termine un outil ou un programme, mais cela concerne davantage l'utilisateur final. Cela pourrait être fait avec py2exe
et py2app
(tous deux compatibles 64 bits). Si vous implémentez l'interpréteur, il n'est pas nécessaire que python soit installé sur le système de l'utilisateur final.
Un fichier
pyd
est identique à undll
et entièrement pris en charge dans python. Vous pouvez donc normalement importer votre module. Vous pouvez trouver plus d'informations à ce sujet ici .
Utiliser et générer des fichiers pyd
est le moyen le plus rapide et le plus simple de créer du code python sûr et portable.
Vous pouvez aussi écrire de vrais fichiers dll
dans C++ et les importer avec ctypes
pour les utiliser (ici un bon post et ici la description python de son fonctionnement)
Vous pouvez utiliser pyinstaller pour convertir les fichiers .py en fichiers exécutables avec tous les packages requis au format .dll.
Étape 1. pip install pyinstaller,
étape 2. nouveau fichier python appelons-le code.py.
étape 3. Ecrivez quelques lignes de code i.e print ("Hello World")
étape 4. Ouvrez l'invite de commande au même endroit et écrivez pyinstaller code.py appuyez sur entrée. Dernière étape, voyez au même endroit deux dossiers nommés build, dist seront créés. dans le dossier dist, il y a un code de dossier et à l'intérieur de ce dossier, il y a un fichier exe code.exe ainsi que les fichiers .dll requis.
L'incorporation Python est prise en charge dans CFFI version 1.5 , vous pouvez créer un fichier .dll
pouvant être utilisé par une application Windows C.
Pour développer la réponse de Nick ODell
Vous devez être sur Windows pour que les DLL fonctionnent, elles ne sont pas portables.
Cependant, le code ci-dessous est multiplateforme et toutes les plates-formes prennent en charge les durées d'exécution. Vous pouvez donc le recompiler pour chaque plate-forme sur laquelle vous souhaitez travailler.
Python ne fournit pas (encore) un outil simple pour créer une dll, mais vous pouvez le faire en C/C++.
Tout d'abord, vous aurez besoin d'un compilateur (Windows n'en a pas par défaut), notamment Cygwin, MinGW ou Visual Studio.
Une connaissance de base de C est également nécessaire (puisque nous coderons principalement en C).
_ {Vous devrez également inclure les en-têtes nécessaires. Je l'ignorerai pour éviter que cela ne devienne horriblement long, et je supposerai que tout est correctement configuré.
Pour cette démonstration, je vais imprimer un monde traditionnel:
Code Python que nous allons convertir en DLL:
def foo(): print("hello world")
Code C:
#include "Python.h" // Includes everything to use the Python-C API
int foo(void); // Declare foo
int foo(void) { // Name of our function in our DLL
Py_Initialize(); // Initialise Python
PyRun_SimpleString("print('hello world')"); // Run the Python commands
return 0; // Finish execution
}
Voici le tutorial pour intégrer Python. Il y a quelques éléments supplémentaires à ajouter ici, mais par souci de brièveté, je les ai laissés de côté.
Compilez-le et vous devriez avoir une DLL. :)
Ce n'est pas tout. Vous devrez distribuer toutes les dépendances nécessaires, ce qui signifie l'exécution python36.dll
et d'autres composants permettant d'exécuter le script Python.
Mon codage C n’est pas parfait. Si quelqu'un peut repérer des améliorations, merci de le commenter et je ferai de mon mieux pour le corriger.
Cela pourrait également être possible en C # à partir de cette réponse Comment appeler une méthode spécifique à partir d’un script Python en C #? , puisque C # peut créer des DLL et que vous pouvez appeler des fonctions Python à partir de C #.