Créer un exécutable en Cython
Joue avec cython. Normalement le programme en Python, mais utilisé C dans une vie antérieure.
Je ne peux pas comprendre comment faire un exécutable.
J'ai téléchargé cython, et je peux faire un .custode fichier (c'est un fichier Python avec un .custode extension), qui s'exécute dans l'interface Python à l'aide de:
importation pyximport; pyximport.installer()
Je peux générer un .c fichier en ligne de commande avec: cython fichier.custode
Je peux générer un .si le fichier par la construction d'une norme setup.py et de l'exécution:
setup.py build_ext --inplace
J'ai essayé de faire un exécutable de la .si le fichier à l'aide de gcc avec diverses options, mais ont toujours des tonnes de fichiers manquants, les en-têtes, etc. Ont essayé de pointage pour les en-têtes à partir de pratiquement partout, mais sans succès, et je ne suis pas vraiment familier avec ce que toutes les options de gcc faire, ou même si je dois être à l'aide de gcc.
J'ai d'avoir un déconnecter ici avec le fait que je puisse exécuter mon programme en Python, shell, mais pas à la ligne de commande (je ne veux pas les utilisateurs à entrer dans le shell, l'importation de modules, etc).
Ce qui me manque ici?
Double Possible de Compiler principal programme en Python à l'aide de Cython
OriginalL'auteur Paul Nelson | 2014-03-19
Vous devez vous connecter pour publier un commentaire.
Ce que vous voulez, c'est le
--embed
drapeau de la Cython compilateur.Il n'y a pas une tonne de documentation sur elle, mais cette est ce que j'ai pu trouver. Il n'lien à un simple exemple de travail.
Pour compiler le Cython code source vers un fichier qui peut ensuite être compilé en un fichier exécutable que vous utilisez une commande comme
cython myfile.pyx --embed
et ensuite compiler avec le compilateur C que vous utilisez.Lorsque vous compilez le code source C, vous aurez toujours besoin d'inclure le répertoire avec le Python en-têtes et lien vers le correspondant Python bibliothèque partagée sur votre système (un fichier nommé quelque chose comme
libpython27.so
oulibpython27.a
si vous utilisez Python 2.7).Edit: Voici quelques instructions sur la façon d'obtenir les commandes, y compris pour le bon en-têtes et de se lier à la bonne bibliothèque.
Comme je l'ai dit plus tôt, vous devez exécuter le Cython compilateur comme ceci:
Pour compiler avec gcc, vous aurez besoin de trouver l'endroit où le python en-têtes sont sur votre système, vous pouvez obtenir cet emplacement en cours d'exécution
distutils.sysconfig.get_python_inc()
(vous devez l'importer).Il est probablement juste de la
/include
sous-répertoire dans votre répertoire d'installation de Python.Vous aurez aussi à trouver le python de la bibliothèque partagée.
Pour Python 2.7, il serait
libpython27.a
sur Windows oulibpython2.7.so
sur Linux.Votre gcc commande sera alors
Il peut être sage d'inclure la
-fPIC
drapeau.Sur Windows 64 bits machines, vous aurez également à inclure les drapeaux
-D MS_WIN64
qui raconte mingw pour compiler pour windows 64 bits.Si vous compilez quelque chose qui dépend de NumPy, vous aurez également besoin d'inclure le répertoire contenant le NumPy les en-têtes.
Vous pouvez trouver ce dossier en cours d'exécution
numpy.get_include()
(encore une fois, après l'import numpy).Votre gcc commande devient alors
Cette option de ligne de commande de gcc guide peut être utile.
Aussi, je vous recommande d'utiliser Cython mémoire de points de vue si possible.
Qui fera en sorte que vous n'avez pas à inclure le NumPy les en-têtes et comprennent la NumPy pxd fichier dans votre Cython fichier.
Il fait également des opérations de coupe plus facile pour le compilateur C pour optimiser.
Je l'ai d'abord testé avec MinGW, bien que MinGW n'est pas compatible avec les récentes versions de Python et de même pour les anciennes versions libpython.a peut être besoin d'installation séparée. Une approche similaire devrait bien fonctionner pour MSVC. Vous aurez à changer de MSVC indicateurs de style et un lien vers libpython.dll au lieu de libpython.un ou libpython.. L'idée principale est que Cython peut générer du code pour un fichier exécutable autonome, mais lorsque vous compilez le fichier généré, vous devez inclure le Python en-têtes et de liaison contre l'exécution Python (et assurez-vous que les deux peuvent être trouvés dans les chemins recherchés par le compilateur).
N'oubliez pas d'ajouter Chrome changements de pilotes comme elle ne fonctionne pas sur un autre pc ainsi que d'autres questions (comme je l'ai appris). Il peut fonctionner mais il n'est pas aussi simple que je l'imaginais. Sinon, distribuer Winpython barebones + python emplois. Ajouter cython si vous voulez de la sécurité. Comme les gens vont trouver, en essayant d'obtenir python pour exécuter sans python est naturellement complexes et sujettes bug
Pyinstaller fonctionne très bien tant que vous fournir le bon cheminement pour chrome pilote. Cependant, les problèmes surviennent lors de la combinaison de pyinstaller + Cython. Voir: stackoverflow.com/questions/47026649/... . Le fichier est incroyablement massive. Winpython + standard de python fichiers peuvent également fonctionner. Je suis encore à voir un travail autonome cython ou nuitka solution, bien que les deux semblent être buggy pour obtenir de travail par-mêmes
Droit, d'une façon ou d'une autre, vous finissez par avoir à compter sur l'interprète et d'exécution correspondant. La redistribution de ces marques des fichiers volumineux. Même la compilation statique approches s'appuient sur l'interprète et de se concentrer sur la compilation des extensions plutôt que de faire une sorte de source-à-source de transformation. Ce genre de chose n'est pas possible pour arbitraire, le code de l'utilisateur à cause de toutes les caractéristiques dynamiques dans Python. Si un exécutable donné peut avoir arbitraire Python sémantique intégré dans celui-ci, il est déjà en œuvre une sorte d'interprète. Il n'y a pas moyen de contourner cela pour l'arbitraire de code utilisateur.
OriginalL'auteur IanH
Testé sur Ubuntu:
Installer
Cython
à l'aide de la suite (Python 2):Pour Python 3:
Pour compiler le code Python dans un code C course (changement
cython
àcython3
pour Python 3):Cela va générer le
example.c
fichier.Maintenant compiler le
example.c
fichier:Exécuter le fichier:
Maintenant pour Python 3, quelque chose de ce genre de travail (pas testé):
où
python3.x
est la version de Python installée sur votre machine.Si tu veux dire que le Python, les importations et les modules, oui.
OriginalL'auteur Rafael