construir programa de pitón con extensiones utilizando py2exe
Pregunta
Estoy teniendo un tiempo difícil encontrar recetas py2exe, especialmente para los casos que requieren extensiones c.
La siguiente receta funciona bien sin la parte "ext_modules". Con ella me sale "NameError: nombre de la 'extensión' no está definido
.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 incluye lo siguiente
#include "sqlite3.h"
#include "Python.h"
#include "numpy/arrayobject.h"
#include <stdio.h>
cualquier ayuda sería muy apreciada.
Solución
Después de fijar el pequeño error creado por olvidar a importar Extensión, me encontré con otros errores que indican un problema con la bandera -lsqlite3. Resulta que yo tenía que seguir los pasos descritos aquí: http: // cboard .cprogramming.com / cplusplus de programación / 82135-sqlite-questions.html
- Descargar sqlitedll-3_3_7.zip y sqlite-source-3_3_7.zip de sqlite.org/download.html
-
Extracto sqlitedll-3.3.7.zip y luego se ejecuta desde la línea de comandos:
dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3dll.a
- Lugar libsqlite3dll.a (recién creada) en el directorio lib MinGW.
- Lugar sqlite3.dll en la ruta del sistema (C: \ Windows \ System32 \ trabajó para mí)
- Extracto sqlite-source-3_3_7.zip y lugar sqlite3.h en su MinGW incluyen directorio.
- Cuando se vincula, tendrá que suministrar el parámetro: -lsqlite3dll (esto significaba cambiar las bibliotecas = [ 'sqlite3'] a las bibliotecas = [ 'sqlite3dll'])
... Después de que la acumulación trabajó.
Aquí está el archivo de instalación de nuevo:
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'])]
)
Otros consejos
Trate de cambiar
from distutils.core import setup
a
from distutils.core import setup, Extension