2009-12-04 2 views
2

Мне сложно найти рецепты py2exe, особенно для случаев, требующих c-расширений.build python program with extensions using py2exe

Следующий рецепт отлично работает без части «ext_modules». С его помощью я получаю «NameError: название 'Расширение' не определен

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 "sqlite3.h" 
#include "Python.h" 
#include "numpy/arrayobject.h" 
#include <stdio.h> 

любая помощь будет принята с благодарностью

ответ

1

После исправления небольшой ошибки, возникшей, забыв импортировать расширение, я столкнулся с другими ошибками, указав проблему с флагом -lsqlite3. Оказывается, мне нужно было следовать инструкциям, приведенным здесь: http://cboard.cprogramming.com/cplusplus-programming/82135-sqlite-questions.html

  1. Скачать sqlitedll-3_3_7.zip и sqlite-source-3_3_7.zip от sqlite.org/download.html
  2. Экстракт sqlitedll-3.3.7 .zip, а затем запустить из командной строки:

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

  3. Место libsqlite3dll.a (только что создали) в директории Lib MinGW.
  4. Место sqlite3.dll на вашей системной дорожке (c: \ Windows \ System32 \ работало для меня)
  5. Извлеките sqlite-source-3_3_7.zip и поместите sqlite3.h в свой каталог MinGW include.
  6. При связывании, вам нужно будет указать параметр: -lsqlite3dll (это означает изменение библиотеки = [ 'sqlite3'] библиотекам = [ 'sqlite3dll'])

... После того, что сборка работал.

Вот файл установки снова:

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'])] 
) 
0

Попробуйте изменить

..
from distutils.core import setup 

до

from distutils.core import setup, Extension