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.

È stato utile?

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

  1. Scarica sqlitedll-3_3_7.zip e sqlite-source-3_3_7.zip da sqlite.org/download.html
  2. Estrai sqlitedll-3.3.7.zip e quindi eseguire dalla riga di comando:

    dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3dll.a

  3. Inserisci libsqlite3dll.a (appena creato) nella directory lib MinGW.
  4. Inserisci sqlite3.dll nel percorso di sistema (C: \ Windows \ System32 \ funzionato per me)
  5. Estratto sqlite-source-3_3_7.zip e luogo sqlite3.h nella MinGW includono directory.
  6. 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top