首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不包括子模块

不包括子模块
EN

Stack Overflow用户
提问于 2014-06-03 17:33:39
回答 1查看 442关注 0票数 0

我有一个中等大小的PyQT5桌面应用程序,它一直很适合使用py2app。我想要合并Esky,以便应用程序可以自我更新,但是应用程序在启动期间(在显示主窗口之前)终止,其中有一个日志条目,上面写着"HelloApp Error“(其中"HelloApp”是我应用程序的名称)。

我创建了一个小的测试用例,它再现了在https://github.com/markmont/esky-package-question上可用的问题

测试用例应用程序具有以下结构:

代码语言:javascript
复制
HelloApp/
    HelloApp/
        HelloApp.py
        helloform
            __init__.py
    setup.py

setup.py包含:

代码语言:javascript
复制
from esky import bdist_esky
from distutils.core import setup

PY2APP_OPTIONS = {
    'argv_emulation': True,
    'includes': [ 'sip', 'PyQt5', 'helloform' ],
    'qt_plugins': [ '*' ]
    }
ESKY_OPTIONS = {
    "freezer_module": "py2app",
    "freezer_options": PY2APP_OPTIONS,
    "includes": [ 'sip', 'PyQt5', 'helloform' ]
    }
HelloApp = bdist_esky.Executable( "HelloApp/HelloApp.py", gui_only=True )

setup(
    name='HelloApp',
    version = "2014060301",
    data_files=[],
    options = { "bdist_esky": ESKY_OPTIONS },
    scripts=[ HelloApp ]
)

helloform/init.py包含语句from helloform import Form --这似乎是导致应用程序无法从"HelloApp错误“开始的原因,就好像我删除了该语句并粘贴到应用程序启动并正常工作的内容中一样。

另外,如果我将所有内容移到一个目录中并调整setup.py中的路径,那么问题就不会发生-- Esky找到了helloform.py (以前命名为helloform.py),应用程序启动并正常工作:

代码语言:javascript
复制
HelloApp/
    HelloApp.py
    helloform.py  # formerly ./HelloApp/helloform/__init__.py
    setup.py

对于中型到大型应用程序来说,...but将所有内容都放在单个目录中并不是一个可伸缩的解决方案。

当问题发生时,python setup.py bdist_esky的输出中没有错误消息,我也没有在Esky文档或web上的各种示例中找到答案。

来自/var/log/system.log的完整错误是:

代码语言:javascript
复制
2014-06-03 13:03:07.100 HelloApp[14968]: HelloApp Error

我假设我在setup.py中没有正确地使用Esky的setup.py选项,但是我不知道如何解决这个问题--有人能帮上忙吗?

其他可能相关的细节: MacOS X 10.9小牛,Python2.7.6(本地构建),qt-5.3.0开源,sip 4.16,PyQT 5.3.0 (GPL),py2app 0.8.1 修补以支持PyQT5,以及GitHub的最新版本。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-06-04 02:25:01

我已经解决了这个问题--这个问题是由于我对Python distutils和setuptools的了解有限。由于py2app (它使用setuptools)“刚刚起作用”,所以我认为问题在于Etsy是如何配置的,而问题在于我是如何使用distutils的。

问题是helloworld.py没有被复制到冻结的应用程序中。

该解决方案涉及重组文件和更改disutils配置以显式地将HelloApp作为包添加。

新的文件结构:

代码语言:javascript
复制
HelloApp/
    hello.py   # formerly HelloApp.py
    HelloApp/
        __init__.py
        helloform.py
    setup.py

新setup.cfg:

代码语言:javascript
复制
from esky import bdist_esky
from distutils.core import setup

PY2APP_OPTIONS = {
    'argv_emulation': True,
    'includes': [ 'sip', 'PyQt5' ],
    'qt_plugins': [ '*' ]
    }
ESKY_OPTIONS = {
    "freezer_module": "py2app",
    "freezer_options": PY2APP_OPTIONS,
    "includes": [ 'sip', 'PyQt5' ]
    }

HelloApp = bdist_esky.Executable( "hello.py", gui_only=True )

setup(
    name='hello',
    version = "2014060301",
    data_files=[],
    options = { "bdist_esky": ESKY_OPTIONS },
    scripts=[ HelloApp ],
    packages=[ 'HelloApp' ],
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24021485

复制
相关文章

相似问题

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