2

我很难找到 py2exe 配方,尤其是对于需要 c 扩展的情况。

以下配方在没有“ext_modules”部分的情况下可以正常工作。有了它,我得到“NameError:未定义名称'Extension'。

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>

任何帮助将不胜感激。

4

2 回答 2

1

在修复了由于忘记导入扩展而产生的小错误后,我遇到了其他错误,说明 -lsqlite3 标志存在问题。原来我需要按照这里列出的步骤:http: //cboard.cprogramming.com/cplusplus-programming/82135-sqlite-questions.html

  1. 从 sqlite.org/download.html 下载 sqlitedll-3_3_7.zip 和 sqlite-source-3_3_7.zip
  2. 解压 sqlitedll-3.3.7.zip 然后从命令行运行:

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

  3. 将 libsqlite3dll.a(刚刚创建的)放在 MinGW lib 目录中。
  4. 将 sqlite3.dll 放在您的系统路径中(c:\Windows\System32\ 为我工作)
  5. 提取 sqlite-source-3_3_7.zip 并将 sqlite3.h 放在您的 MinGW 包含目录中。
  6. 链接时,您需要提供参数:-lsqlite3dll(这意味着将 library=['sqlite3'] 更改为 libraries=['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'])]
)
于 2009-12-07T19:40:53.610 回答
0

尝试改变

from distutils.core import setup

from distutils.core import setup, Extension
于 2009-12-04T17:00:57.257 回答