将py2app与lxml包一起使用时出现问题

Cha*_*son 6 python lxml py2app

我试图使用'py2app'从一些Python脚本生成一个独立的应用程序.Python使用'lxml'包,我发现我必须在'py2app'使用的setup.py文件中明确指定它.但是,生成的应用程序仍然无法在未安装"lxml"的计算机上运行.

我的Setup.py看起来像这样:

from setuptools import setup

OPTIONS = {'argv_emulation': True, 'packages' : ['lxml']}

setup(app=[MyApp.py],
      data_files=[],
      options={'py2app' : OPTIONS},
      setup_requires=['py2app'])
Run Code Online (Sandbox Code Playgroud)

运行该应用程序将生成以下输出:

MyApp Error
An unexpected error has occurred during execution of the main script
ImportError: dlopen(/Users/ake/XXXX/XXXX/MyApp.app/Contents/Resources/lib/python2.5/lxml/etree.so, 2): Symbol not found: _xmlSchematronParse
Referenced from: /Users/ake/XXXX/XXXX/MyApp.app/Contents/Resources/lib/python2.5/lxml/etree.so
Expected in: dynamic lookup
Run Code Online (Sandbox Code Playgroud)

符号'_xmlSchematronParse'来自名为'libxml2'的库,'lxml'依赖于它.预装Mac OS X的版本对于'lxml'来说不够新,所以我必须安装2.7.2版本(在/ usr/local中).由于某种原因,py2app链接在/Developer/SDKs/MacOSX10.3.9.sdk/usr/lib中的版本中.当我将我的应用程序作为Python脚本运行时,会找到正确的版本.(我刚刚通过隐藏2.7.2版本检查了这一点.)

所以现在我的问题是,如何告诉py2app在哪里寻找库?

Cha*_*son 13

找到了.py2app有一个'frameworks'选项,可以让你指定框架,还有dylibs.我的setup.py文件现在看起来像这样:

from setuptools import setup

DATA_FILES = []
OPTIONS = {'argv_emulation': True,
           'packages' : ['lxml'],
           'frameworks' : ['/usr/local/libxml2-2.7.2/lib/libxml2.2.7.2.dylib']
          }

setup(app=MyApp.py,
      data_files=DATA_FILES,
      options={'py2app' : OPTIONS},
      setup_requires=['py2app'])
Run Code Online (Sandbox Code Playgroud)

这就解决了.

感谢您带来的建议.