py2exeを使用して拡張機能を備えたPythonプログラムをビルドします

StackOverflow https://stackoverflow.com/questions/1848275

  •  13-09-2019
  •  | 
  •  

質問

特に c 拡張子が必要な場合、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>

助けていただければ幸いです。

役に立ちましたか?

解決

拡張機能のインポートを忘れたために発生した小さなエラーを修正した後、-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 (これは、libraries=['sqlite3'] を library=['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