【问题标题】:py2app not working with MySQLdbpy2app 不能与 MySQLdb 一起使用
【发布时间】:2016-03-16 09:47:24
【问题描述】:

我正在构建一个使用 MySQLdb 的应用程序,它似乎可以正确构建,但是在另一台 Mac 上运行它时它意外退出。 是否有任何必要的步骤来让 MySQLdb 正确包含在 py2app 中? 这是我的 setup.py:

from setuptools import setup

APP = ['myApplication.py']
DATA_FILES = []
OPTIONS = {
                   'iconfile':'myIcon.icns',
                   'plist': {'CFBundleShortVersionString':'1.0',
                             'NSHumanReadableCopyright': u"Copyright © 2016, All Rights Reserved"}}

setup(
    app=APP,
    name='Transcoder_V1.0',
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

我之前使用这个精确的设置和完全相同的 myApplication.py 成功构建了这个,它确实在其他 Mac 上运行,所以唯一改变的是版本号,它们是:

Python: 2.7.11
MySQL-Python: 1.2.5
mysql-connector-python: 2.0.4
mysqlclient: 1.3.7
py2app: 0.9
setuptools: 20.3

有什么我可以尝试解决的吗?

更新: 我只是尝试添加到设置中:

PACKAGES = ['MySQLdb']
INCLUDES = ['MySQLdb']
OPTIONS = {'argv_emulation': True,
          'packages': PACKAGES,
          'includes': INCLUDES,
          } 

但我还是意外退出,这是控制台崩溃日志的开始:

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libmysqlclient.18.dylib             0x000000010baf5e18 mysql_server_init + 132
1   _mysql.so                           0x00000001095b0fc1 0x1095ad000 + 16321
2   org.python.python                   0x00000001022c410c PyEval_EvalFrameEx + 40108
3   org.python.python                   0x00000001022c4ff3 PyEval_EvalCodeEx + 2131

请问还有什么可以尝试的吗?

更新: 我正在连接 MySQL Server 5.6 版,我需要更新吗?

【问题讨论】:

    标签: python mysql python-2.7 mysql-python py2app


    【解决方案1】:

    编辑:起床,对不起。我的第一个答案是 py2exe。我不知道 py2app 是否会创建执行日志。无论如何,请尝试之前建议的相同方法:

        PACKAGES = ['MySQLdb']
        INCLUDES = ['MySQLdb']
        OPTIONS = {'argv_emulation': True,
                  'packages': PACKAGES,
                  'includes': INCLUDES,
                  }  
    

    原始帖子(我会留下它以防万一): 构建中的 .exe 文件应该为您提供一个日志,其中包含有关失败的更具体的信息。无论如何,您可能想尝试直接在设置中包含“MySQL”包:

        # setup.py
        from distutils.core import setup
        import py2exe
    
        includes = ["_mysql","MySQLdb","_mysql_exceptions",]
    
        options = {"py2exe": { # create a compressed zip archive
                              "compressed": 1,
                              "optimize": 2,
                              "includes": includes,
                                  }}
        setup(
            options = options,
            console=['hamtainfo.py'],
    
            )
    

    这段代码直接来自py2exe Mailing List

    【讨论】:

    • 我刚刚尝试添加 py2app 的东西,结果相同,请参阅上面的更新?
    • 是的,日志信息不是很丰富,但似乎无法找到 libmysqlclient.18.dylib。检查文件是否在您正在制作的发行版中。 Stackoverflow 中有一个专门针对该文件的问题,看看它对您有帮助:stackoverflow.com/questions/6383310/…
    • 文件在那个位置,你需要在目标机器上安装 MySQL 吗?
    • 与禁用 SIP 有什么关系?
    • 如果 py2app 做我认为它做的事情,你应该把所有东西都打包在你的构建中。但是在我给你的链接中看到另一个人的帖子,他似乎是从 MySQL 安装中获取该文件的。尽管如此,这应该是一个路径问题。我不知道如何处理 SIP,但请注意另一篇文章(在同一链接中)建议实际修复 lib。我认为你应该先尝试一下。
    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2017-04-14
    相关资源
    最近更新 更多