【问题标题】:Py2app include lxmlPy2app 包括 lxml
【发布时间】:2015-03-09 22:08:39
【问题描述】:

我在 OSX Yosemite 上的 py2app 中构建了一个应用程序,它使用 lxml。构建的应用程序在 OSX 10.8.5 上引发错误。这是我用于 py2app 的 setup.py 文件:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['iTunes_Upload_App_V6.2.py']
DATA_FILES = []
OPTIONS = {
    'iconfile':'AppleLogo.icns',
    'packages' : ['wx', 'lxml'],
    'plist': {'CFBundleShortVersionString':'6.2',}
}

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

这是我在没有安装额外模块或软件的 OSX 10.8.5 机器上运行它时收到的错误。

-------------------
Application Error!
10-53-07_09-01-2015
Traceback (most recent call last):
  File "/Applications/iTunes_Upload_App_V6.2.app/Contents/Resources/iTunes_Upload_App_V6.2.py", line 1781, in GetJobInfo
  File "lxml/etree.pyc", line 14, in <module>
  File "lxml/etree.pyc", line 10, in __load
ImportError: dlopen(/Applications/iTunes_Upload_App_V6.2.app/Contents/Resources/lib/python2.7/lib-dynload/lxml/etree.so, 2): Symbol not found: _xmlBufContent
  Referenced from: /Applications/iTunes_Upload_App_V6.2.app/Contents/Resources/lib/python2.7/lib-dynload/lxml/etree.so
  Expected in: /usr/lib/libxml2.2.dylib
 in /Applications/iTunes_Upload_App_V6.2.app/Contents/Resources/lib/python2.7/lib-dynload/lxml/etree.so

我可以在 10.8.5 系统上不安装任何其他东西的情况下完成这项工作吗?

更新: 我也试过这个 setup.py,还是不行:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['iTunes_Upload_App_V6.2.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True,
                   'packages' : ['lxml'],
                   'frameworks' : ['/usr/local/libxml2-2.7.2/lib/libxml2.2.7.2.dylib'],
                   'iconfile':'AppleLogo.icns',
                   'plist': {'CFBundleShortVersionString':'6.2',}
                   }

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

更新:这里是我使用的 lxml 版本:

>>> from lxml import etree
>>> etree.LXML_VERSION
(3, 3, 5, 0)

更新:刚刚将 lxml 更新到版本 (3, 4, 1, 0),但仍然有同样的问题。

【问题讨论】:

  • 什么版本的lxml?
  • 我已更新问题以包含 lxml 版本。
  • 我刚刚将 lxml 更新到版本 (3, 4, 1, 0),但仍然是同样的问题。

标签: python macos lxml


【解决方案1】:

我在 10.8.5 上,似乎安装的 libxml2 确实不包含该符号。 nm -g /usr/lib/libxml2.2.dylib | grep xmlBufContent 空了。 Apple 可能会随 Yosemite 一起发布更新版本。您可以(技术上和法律上)将 libxml2 与您的应用程序捆绑在一起吗?

【讨论】:

  • 我将如何使用 py2app 将 libxml2 与我的应用程序捆绑在一起?
  • 我不确定,我从未使用过 py2app,但现在我看到您的 OPTIONS 字典两次指定了 frameworks 键,覆盖了第一个值。也许这会破坏你的构建?您能否查看构建的应用程序并验证它是否包含您需要的所有 dylib?
  • 我再次更新了这个问题,只包含一个框架,但问题仍然存在。有没有办法解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2011-05-29
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
相关资源
最近更新 更多