سؤال

أواجه صعوبة في العثور على وصفات PY2EXE، خاصة بالنسبة للحالات التي تتطلب امتدادات C.

الوصفة التالية تعمل بشكل جيد دون الجزء "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>

سيتم تقدير أي مساعدة إلى حد كبير.

هل كانت مفيدة؟

المحلول

بعد إصلاح الخطأ الصغير الذي تم إنشاؤه عن طريق نسيان استيراد الملحق، ركضت أخطاء أخرى تفيد بمشكلة مع علامة -lsqlite3. اتضح أنني بحاجة إلى اتباع الخطوات الموضحة هنا: http://cboard.cprogramming.com/cplusplus-progrogramming/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 (تم إنشاؤه فقط) في دليل Mingw Lib.
  4. ضع sqlite3.dll في مسار النظام الخاص بك (c: windows system32 worked بالنسبة لي)
  5. استخراج sqlite-source-3_3_7.zip و Place sqlite3.h في mingw الخاص بك يشمل الدليل.
  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'])]
)

نصائح أخرى

حاول التغيير

from distutils.core import setup

ل

from distutils.core import setup, Extension
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top