首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Py2app和Py2exe未能打包Patsy文件

Py2app和Py2exe未能打包Patsy文件
EN

Stack Overflow用户
提问于 2013-08-20 02:28:47
回答 1查看 307关注 0票数 0

我一直在使用py2app (MacOSX10.6)和py2exe (Win XP和Win7)构建一个基于python的独立应用程序。最近,我增加了对依赖于库补丁的函数的支持。但是,在构建我的软件的py2app或py2exe版本时,只有patsy中的"init.pyc“和"origin.pyc”文件包含在网站-Packages.zip patsy文件夹中(不包括额外的20个python模块文件)。导入patsy时,独立应用程序会抛出错误"ImportError: No模块名为highlevel“(highlevel是patsy模块)。

这方面的一个糟糕的工作是将丢失的.pyd模块扔到站点-Packages.zip的patsy目录中,但这并不理想。本文给出了一个用于py2app代码的简单示例,但对于py2exe也是如此:

test_import.py

代码语言:javascript
复制
import patsy
print 'hello patsy'

setup.py

代码语言:javascript
复制
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"])

任何建议都将受到高度赞赏。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-20 14:16:00

问题是patsy在定义其主名称空间(请参阅patsy/__init__.py的末尾)方面略显聪明。

代码语言:javascript
复制
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的启发式方法,以确定哪些文件正在使用;因为没有显式的文字导入语句,它们无法“看到”所有这些模块实际上都被导入了。真正的解决方案是让py2exe/py2app赶上过去5年的python基础设施开发,并信任包的setup.py只安装所需的东西。

同时,这是一个非常标准的问题,因此这两个包都有解决方法,例如对于py2app,这些看起来被称为“菜谱”:http://pythonhosted.org/py2app/recipes.html

编辑:备用解决方案:使用刚刚发布的patsy 0.2.1,它有一个稍微不那么聪明的__init__.py,应该可以正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18326079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档