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

16
demandé sur Developer 2012-06-02 06:33:23

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.

8
répondu Dikei 2012-06-02 09:49:05

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.

5
répondu jb. 2012-06-02 03:06:06

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?

5
répondu Nick ODell 2017-05-23 10:31:28

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 un dll 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)

2
répondu MagSec 2017-12-12 10:24:53

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.

1
répondu Muhammad Adnan 2018-06-01 21:34:23

prendre Visual Studio Express et IronPython et le faire de cette façon? Vous serez dans le monde de python 2.7.6.

0
répondu Alan B 2017-01-19 18:42:05

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.

0
répondu Ken Hung 2018-01-12 04:08:21

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#.

0
répondu Simon 2018-06-01 21:18:11