2013-08-20 44 views
0

我一直在使用py2app(Mac OS X 10.6)和py2exe(Win XP和Win7)构建一个基于python的独立应用程序。最近我增加了对依赖库patsy的函数的支持。但是,在构建我的软件的py2app或py2exe版本时,site-packages.zip patsy文件夹(不包括20个附加python模块文件)中只包含patsy的“init .pyc”和“origin.pyc” 。当导入patsy时,独立应用程序会抛出错误“ImportError:No module named highlevel”(highlevel是patsy模块)。Py2app和Py2exe无法打包Patsy文件

一个丑陋的工作是为了将丢失的.pyd模块放入site-packages.zip的patsy目录中,但这并不理想。本作py2app代码一个简单的例子示出,但同样适用于py2exe:

test_import.py

import patsy 
print 'hello patsy' 

setup.py

includes = ["patsy"] 

from distutils.core import setup 
import py2app 
import patsy 
from patsy import highlevel 

options = {"py2app":{"includes": includes}} 
setup(name='test',app=["test_import.py"],setup_requires=["py2app"]) 

任何建议不胜感激。谢谢。

回答

1

的问题是,帕齐是略高于巧于它是如何定义其主命名空间,看到的patsy/__init__.py结束:

def _reexport(modname): 
    __import__(modname) 
    mod = sys.modules[modname] 
    for var in mod.__all__: 
     __all__.append(var) 
     globals()[var] = getattr(mod, var) 
for child in ["highlevel", "build", "constraint", "contrasts", 
       "desc", "design_info", "eval", "origin", "state", 
       "user_util", "missing", "splines"]: 
    _reexport("patsy." + child) 

这避免了一堆复制/粘贴代码重复,但食堂了py2exe和py2app的启发式用于确定哪些文件正在使用;因为没有明确的文字导入语句,他们不能“看到”所有这些模块实际上已经被导入。 real解决方案适用于py2exe/py2app,以赶上过去5年的python基础架构开发和信任包setup.py,只安装所需的东西。与此同时,这是一个非常标准的问题,因此两个软件包都有解决它的方法,例如,对于py2app这些似乎被称为“食谱”:http://pythonhosted.org/py2app/recipes.html

编辑:备用解决方案:使用刚刚发布的patsy 0.2.1,它有一个稍微不太聪明__init__.py这应该只是工作。

+0

谢谢纳撒尼尔!更新(或者我应该说降级?)到patsy 0.2.1做了窍门。感谢您的回应。 – nateS