在cx_freeze中使用mysql-connector

0 投票
1 回答
836 浏览
提问于 2025-04-18 11:33

我正在尝试将一个完全可以运行的Python 3.4脚本制作成一个exe程序,但我无法把官方的MySQL连接器的依赖项嵌入进去。以下是有问题的示例代码:

import mysql.connector
from settings import *

connLocal  = mysql.connector.connect( host   =  DB_CRM_HOST,
                                      user   =  DB_CRM_USER,
                                      passwd =  DB_CRM_PASS,
                                      db     =  DB_CRM_DB )
cursorLocal = connLocal.cursor ()
sqlStr = "SELECT * FROM Users"
cursorLocal.execute( sqlStr)
for row in  cursorLocal.fetchall():
    print(row)

这是我的设置脚本:

'''script per il setup'''
import sys
from cx_Freeze import setup, Executable

EXCLUDES = ['_ssl',  # Exclude _ssl
            'pyreadline', 'difflib', 'doctest', 'locale',
            'optparse', 'pickle', 'calendar']  # Exclude standard library
PACKAGES = []
INCLUDES = []
SCRIPT_NAME = "sync_crm2web.py"
EXE_NAME = "sync_crm2web.exe"
PRJ_NAME = "sync_crm2web"
VERSION = 1.0
AUTHOR = "Antonio"
DESCRIPTION = "Sincronizzazione crm sito internet"
BASE = "Console" #"Win32GUI"

#------------------------------------------------------------------------------
BUILD_EXE_OPTIONS = {"packages": PACKAGES,
                     "excludes": EXCLUDES,
                     "includes": INCLUDES,
                     "path": sys.path,
                     'append_script_to_exe':False,
                     'build_exe':"dist/bin",
                     'compressed':True,
                     'copy_dependent_files':True,
                     'create_shared_zip':True,
                     'include_in_shared_zip':True,
                     'optimize':2,}

EXE = Executable(script=SCRIPT_NAME,
                 base=BASE,
                 compress=True,
                 targetDir="dist",
                 targetName=EXE_NAME,
                 initScript=None,
                 copyDependentFiles=True,
                 appendScriptToExe=True,
                 appendScriptToLibrary=False,
)

setup(name=PRJ_NAME,
      version=VERSION,
      author=AUTHOR,
      description=DESCRIPTION,
      options={"build_exe": BUILD_EXE_OPTIONS},
      executables=[EXE])

我还尝试强制设置PACKAGES = []和INCLUDES = [],并结合mysql、mysql-connector和mysql.connector,但似乎都没有效果。

我总是得到:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
    exec(code, m.__dict__)
  File "sync_crm2web.py", line 1, in <module>
  File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", line 2214, in _find_and_load
  File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", line 2189, in _find_and_load_unlocked
  File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", line 321, in _call_with_frames_removed
  File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", line 2214, in _find_and_load
  File "c:\python\32-bit\3.4\lib\importlib\_bootstrap.py", line 2201, in _find_and_load_unlocked
ImportError: No module named 'mysql'

有人能帮我吗?完整的cx_freeze日志在这里 http://pastebin.com/S3TMzAnB

1 个回答

1

这个问题的解决方法是参考了来自 Cx-Freeze错误 - Python 34 的信息,另外也用了 这个网站 的安装包,所以我不是通过PIP安装的,而是直接用这个安装程序安装了cx_Freeze。

之后,我注释掉了需要的_ssl模块,并把所有的库文件(在'build_exe'属性中)放到了可执行文件的同一个文件夹里。

'''script per il setup'''
import sys
from cx_Freeze import setup, Executable

EXCLUDES = [#'_ssl',  # !!!! COMMENTED !!!!
            'pyreadline', 'difflib', 'doctest', 'locale',
            'optparse', 'pickle', 'calendar']  # Exclude standard library
PACKAGES = []
INCLUDES = []
SCRIPT_NAME = "sync_crm2web.py"
EXE_NAME = "sync_crm2web.exe"
PRJ_NAME = "sync_crm2web"
VERSION = 1.0
AUTHOR = "Antonio"
DESCRIPTION = "Sincronizzazione crm sito internet"
BASE = "Console" #"Win32GUI"

#------------------------------------------------------------------------------
BUILD_EXE_OPTIONS = {"packages": PACKAGES,
                     "excludes": EXCLUDES,
                     "includes": INCLUDES,
                     "path": sys.path,
                     'append_script_to_exe':False,
                     'build_exe':"dist", # !!!! BEFORE WAS dist/bin !!!!
                     'compressed':True,
                     'copy_dependent_files':True,
                     'create_shared_zip':True,
                     'include_in_shared_zip':True,
                     'optimize':2,}

EXE = Executable(script=SCRIPT_NAME,
                 base=BASE,
                 compress=True,
                 targetDir="dist",
                 targetName=EXE_NAME,
                 initScript=None,
                 copyDependentFiles=True,
                 appendScriptToExe=True,
                 appendScriptToLibrary=False,
)

setup(name=PRJ_NAME,
      version=VERSION,
      author=AUTHOR,
      description=DESCRIPTION,
      options={"build_exe": BUILD_EXE_OPTIONS},
      executables=[EXE])

撰写回答