costruire programma Python con le estensioni utilizzando py2exe
Domanda
Sto avendo difficoltà a trovare ricette py2exe, soprattutto per i casi che richiedono estensioni C.
La ricetta che segue funziona benissimo senza la parte "extension". Con esso ottengo "NameError: nome 'estensione' non è definito
.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 include le seguenti
#include "sqlite3.h"
#include "Python.h"
#include "numpy/arrayobject.h"
#include <stdio.h>
tutto l'aiuto sarebbe molto apprezzato.
Soluzione
Dopo aver fissato il piccolo errore creato da dimenticare per l'importazione di estensione, mi sono imbattuto in altri errori che dichiarano un problema con la bandiera -lsqlite3. Risulta avevo bisogno di seguire la procedura descritta qui: http: // cboard .cprogramming.com / cplusplus-programmazione / 82.135-sqlite-questions.html
- Scarica sqlitedll-3_3_7.zip e sqlite-source-3_3_7.zip da sqlite.org/download.html
-
Estrai sqlitedll-3.3.7.zip e quindi eseguire dalla riga di comando:
dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3dll.a
- Inserisci libsqlite3dll.a (appena creato) nella directory lib MinGW.
- Inserisci sqlite3.dll nel percorso di sistema (C: \ Windows \ System32 \ funzionato per me)
- Estratto sqlite-source-3_3_7.zip e luogo sqlite3.h nella MinGW includono directory.
- Quando si collega, è necessario fornire il parametro: -lsqlite3dll (questo significava cambiare le librerie = [ 'sqlite3'] alle librerie = [ 'sqlite3dll'])
... Dopo che l'accumulo ha funzionato.
Ecco il file di installazione di nuovo:
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'])]
)
Altri suggerimenti
Prova a cambiare
from distutils.core import setup
a
from distutils.core import setup, Extension