construire le programme python avec des extensions en utilisant py2exe
Question
Je vais avoir du mal à trouver des recettes py2exe, en particulier pour les cas qui nécessitent des extensions c.
La recette suivante fonctionne très bien sans la partie « ext_modules ». Avec elle, je reçois « NameError: nom « Extension » est pas défini
.from distutils.core import setup
import py2exe
import matplotlib
import os
s = os.popen('svnversion')
version = s.read()
f = open('cpa_version.py', 'w')
f.write('VERSION = "%s"\n'%(version.strip()))
f.close()
setup(console=['cpa.py'],
options={
'py2exe': {
'packages' : ['matplotlib', 'pytz', 'MySQLdb', 'pysqlite2'],
'includes' : ['PILfix', 'version'],
"excludes" : ['_gtkagg', '_tkagg',
"Tkconstants","Tkinter","tcl"],
"dll_excludes": ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll',
'tcl84.dll', 'tk84.dll']
}
},
data_files=matplotlib.get_py2exe_datafiles(),
# how to build _classifier.c???
ext_modules = [Extension('_classifier',
sources = ['_classifier.c'],
include_dirs=[numpy.get_include()],
libraries = ['sqlite3'])]
)
_classifier.c comprend les éléments suivants
#include "sqlite3.h"
#include "Python.h"
#include "numpy/arrayobject.h"
#include <stdio.h>
toute aide serait grandement appréciée.
La solution
Après avoir fixé la petite erreur créée en oubliant d'importer l'extension, je suis tombé sur d'autres erreurs indiquant un problème avec le drapeau -lsqlite3. S'avère que je devais suivre les étapes décrites ici: http: // cboard .cprogramming.com / Cplusplus programmation / 82135-sqlite-questions.html
- Télécharger sqlitedll-3_3_7.zip et sqlite-source-3_3_7.zip de sqlite.org/download.html
-
Extrait sqlitedll-3.3.7.zip puis exécutez à partir de la ligne de commande:
-D dlltool sqlite3.dll -d sqlite3.def libsqlite3dll.a -l
- La place libsqlite3dll.a (juste créé) dans le répertoire lib MinGW.
- La place sqlite3.dll dans votre chemin système (c: \ Windows \ System32 \ a fonctionné pour moi)
- Extrait sqlite-source-3_3_7.zip et le lieu sqlite3.h dans votre MinGW include.
- Lorsque vous établissez un lien, vous devez fournir le paramètre: -lsqlite3dll (cela signifie changer les bibliothèques = [ 'sqlite3'] aux bibliothèques = [ 'sqlite3dll'])
... Après que la construction a travaillé.
Voici à nouveau le fichier de configuration:
from distutils.core import setup, Extension
import py2exe
import matplotlib
import os
import numpy
setup(console=['cpa.py'],
options={
'py2exe': {
'packages' : ['matplotlib', 'pytz', 'MySQLdb', 'pysqlite2'],
'includes' : ['PILfix', 'version'],
"excludes" : ['_gtkagg', '_tkagg',
"Tkconstants","Tkinter","tcl"],
"dll_excludes": ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll',
'tcl84.dll', 'tk84.dll']
}
},
data_files=matplotlib.get_py2exe_datafiles(),
ext_modules = [Extension('_classifier',
sources = ['_classifier.c'],
include_dirs=[numpy.get_include()],
libraries = ['sqlite3dll'])]
)
Autres conseils
Essayez de changer
from distutils.core import setup
à
from distutils.core import setup, Extension