Python-Programm mit Erweiterungen bauen py2exe mit
Frage
Ich habe eine harte Zeit der Suche nach py2exe Rezepte, vor allem für Fälle, die c-Erweiterungen erforderlich.
Das folgende Rezept funktioniert ohne „ext_modules“ Teil in Ordnung. Damit erhalte ich „Nameerror: name‚Extension‘definiert ist, nicht
.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 beinhaltet folgende
#include "sqlite3.h"
#include "Python.h"
#include "numpy/arrayobject.h"
#include <stdio.h>
Jede Hilfe wäre sehr dankbar.
Lösung
Nach dem kleinen Fehler durch Vergessen erstellt Festsetzung Erweiterung zu importieren, lief ich in andere Fehler ein Problem mit der -lsqlite3 Flagge besagt. Stellt sich heraus, ich brauchte die hier beschriebenen Schritte folgen: http: // cboard .cprogramming.com / cplusplus-Programmierung / 82135-sQLite-questions.html
- Download sqlitedll-3_3_7.zip und sqlite-source-3_3_7.zip von sqlite.org/download.html
-
Extrahieren sqlitedll-3.3.7.zip und dann von der Kommandozeile ausgeführt werden:
dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3dll.a
- Platz libsqlite3dll.a (gerade erstellt) im MinGW lib.
- Platz sqlite3.dll in Ihrem Systempfad (C: \ Windows \ System32 \ für mich gearbeitet)
- Extract sqlite-source-3_3_7.zip und Ort sqlite3.h in Ihrem MinGW enthalten Verzeichnis.
- Wenn Sie verknüpfen, müssen Sie die Parameter liefern: -lsqlite3dll (dies bedeutete Ändern Bibliotheken = [ 'sqlite3'] zu Bibliotheken = [ 'sqlite3dll'])
... Danach wird die Build gearbeitet.
Hier ist die Setup-Datei wieder:
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'])]
)
Andere Tipps
Versuchen Sie,
from distutils.core import setup
from distutils.core import setup, Extension