Comment compiler un paquet Python dans une dll
Eh bien, j'ai un paquet Python. Je dois le compiler comme dll avant de le distribuer d'une manière facilement importable. Comment? vous pouvez suggérer que *.pyc
. Mais j'ai lu quelque part tout *.pyc
se décompose facilement!
mise à Jour:
Procédez comme suit:
1) j'ai écrit un paquet python
2) souhaitez distribuer
3) ne veulent PAS distribuer le code source
4)*.pyc is decompilable > > la source peut être extrait!
5) dll standard
8 réponses
Ecrivez tout ce que vous voulez cacher dans Cython, et compilez - le à pyd
. C'est aussi proche que possible de faire du code Python compilé.
en outre, dll n'est pas un standard, pas dans le monde de Python. Ils ne sont pas portables.
vous pouvez utiliser py2exe.org pour convertir les scripts python en exécutables windows. Ça ne marchera que sur les fenêtres, mais c'est mieux que rien.
Vous pouvez incorporer python à l'intérieur de C. Le vrai truc est de convertir entre les valeurs C et les valeurs Python. Une fois que vous avez fait cela, cependant, faire une DLL est assez simple.
cependant, pourquoi avez-vous besoin de faire une dll? Avez-vous besoin d'utiliser ceci à partir d'un programme non-python?
j'utiliserais aussi Cython pour générer pyd
des fichiers, comme L'a écrit Dikei.
Mais si vous voulez vraiment sécuriser votre code, vous devriez plutôt écrire les choses importantes en C++. Le mieux serait de combiner les deux C++ et Python. L'idée: vous laisseriez le code python ouvert pour les réglages, 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ûre) ces jours-ci) et l'utilisation de ces dll
fichiers 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. J'ai créer un fichier d'exécution (exe
,app
) une fois que j'ai fini d'un outil ou d'un programme, mais c'est plus pour l'utilisateur final. Cela pourrait être fait avec py2exe
et py2app
(tous deux compatibles 64 bits). Si vous implémentez l'interpréteur, la machine de l'utilisateur final n'a pas à installer python sur le système.
Un
pyd
le fichier est le même comme undll
et entièrement supportée à l'intérieur de python. Vous pouvez donc normalement importer votre module. Vous pouvez trouver plus d'informations à ce sujet ici.
utiliser et générer pyd
files est le moyen le plus rapide et le plus facile de créer du code Python sûr et portable.
Vous pouvez également écrire réel dll
fichiers C++ et les importer avec ctypes
pour les utiliser (ici un bon post et voici le Python description de la façon dont il fonctionne)
Vous pouvez utiliser pyinstaller pour la conversion du .les fichiers py dans l'exécutable avec tous les paquets requis dans .Format dll.
Étape 1. pip install pyinstaller,
Etape 2. nouveau fichier python code.py .
Etape 3. Ecris quelques lignes de code I. e print ("Hello World")
étape 4. Ouvrir L'invite de commande au même endroit et écrire pyinstaller code.py appuyez sur Entrée. Dernière étape voir dans le même emplacement deux noms de dossiers construire, dist sera créé. a l'intérieur du dossier dist il y a du code de dossier et à l'intérieur de ce dossier il y a un code de fichier exe.exe requises .les fichiers dll.
prendre Visual Studio Express et IronPython et le faire de cette façon? Vous serez dans le monde de python 2.7.6.
Python embedding est supporté dans CFFI version 1.5, vous pouvez créer un .dll
fichier qui peut être utilisé par une application Windows C.
Pour étoffer la réponse de Nick ODell
vous devez être sur Windows pour que les DLLs fonctionnent, ils ne sont pas portables.
cependant le code ci-dessous est multiplate-forme et toutes les plates-formes prennent en charge les temps d'exécution de sorte que cela peut être recompilé pour chaque plate-forme sur laquelle vous avez besoin de travailler.
Python ne fournit pas (encore) un outil facile pour créer une dll, cependant vous pouvez le faire en C/C++
tout d'Abord vous aura besoin d'un compilateur (Windows n'en a pas par défaut) notamment Cygwin, MinGW ou Visual Studio.
vous aurez également besoin d'inclure les en-têtes nécessaires, je vais sauter ceci afin qu'il ne devienne pas horriblement long, et supposera que tout est mis en place correctement.
Pour cette démonstration, je vais imprimer un traditionnel bonjour monde:
code Python nous allons convertir en DLL:
def foo(): print("hello world")
C code:
#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
}
Ici tutoriel pour intégrer Python. Il y a quelques choses qui devraient être ajoutées ici, mais pour des raisons de concision, j'ai laissé ceux.
compilez - le et vous devriez avoir une DLL. :)
ce n'est pas tout. Vous aurez besoin de distribuer toutes les dépendances nécessaires, que sera le python36.dll
exécuter en temps et quelques autres composants pour exécuter le script Python.
mon codage C n'est pas parfait, donc si quelqu'un peut repérer des améliorations s'il vous plaît commenter et je ferai de mon mieux pour corriger le it.
Il 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 DLLs, et vous pouvez appeler les fonctions Python à partir de C#.