首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用py2app打包pyside程序错误包括图像格式插件

使用py2app打包pyside程序错误包括图像格式插件
EN

Stack Overflow用户
提问于 2013-02-27 15:27:22
回答 2查看 937关注 0票数 1

setup.py

代码语言:javascript
复制
APP = ['systray.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True,
           'includes': ['djmemori.settings'],
           'packages': ['django', 'south'],
           'qt_plugins': 'imageformats' # if I comment out this line, python setup.py py2app will success
           }

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

python setup.py py2app

代码语言:javascript
复制
...
copying file /Users/teamx/workspace/env-memori-pkg/lib/python2.7/site-packages/py2app/recipes/qt.conf -> /Users/teamx/workspace/memori_pc/src/djmemori/dist/systray.app/Contents/Resources/qt.conf
copying file /Developer/Applications/Qt/plugins/imageformats/libqgif.dylib -> /Users/teamx/workspace/memori_pc/src/djmemori/dist/systray.app/Contents/Resources/qt_plugins/imageformats/libqgif.dylib
copying file /Developer/Applications/Qt/plugins/imageformats/libqico.dylib -> /Users/teamx/workspace/memori_pc/src/djmemori/dist/systray.app/Contents/Resources/qt_plugins/imageformats/libqico.dylib
copying file /Developer/Applications/Qt/plugins/imageformats/libqjpeg.dylib -> /Users/teamx/workspace/memori_pc/src/djmemori/dist/systray.app/Contents/Resources/qt_plugins/imageformats/libqjpeg.dylib
copying file /Developer/Applications/Qt/plugins/imageformats/libqmng.dylib -> /Users/teamx/workspace/memori_pc/src/djmemori/dist/systray.app/Contents/Resources/qt_plugins/imageformats/libqmng.dylib
copying file /Developer/Applications/Qt/plugins/imageformats/libqsvg.dylib -> /Users/teamx/workspace/memori_pc/src/djmemori/dist/systray.app/Contents/Resources/qt_plugins/imageformats/libqsvg.dylib
copying file /Developer/Applications/Qt/plugins/imageformats/libqtiff.dylib -> /Users/teamx/workspace/memori_pc/src/djmemori/dist/systray.app/Contents/Resources/qt_plugins/imageformats/libqtiff.dylib
copying file /.dbfseventsd -> /Users/teamx/workspace/memori_pc/src/djmemori/dist/systray.app/Contents/Resources/qt_plugins/imageformats/.dbfseventsd
error: /.dbfseventsd: Operation not supported on socket
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-01 15:41:21

修改代码py2app/recipes/pyide.py:21

代码语言:javascript
复制
    if '*' in item:
        for path in glob.glob(os.path.join(plugin_dir, item)):
            resources.append((os.path.dirname('qt_plugins' + path[len(plugin_dir):]), [path]))
        else:
            resources.append((os.path.dirname(os.path.join('qt_plugins', item)), os.path.join(plugin_dir, item)))

代码语言:javascript
复制
    if '*' in item:
        for path in glob.glob(os.path.join(plugin_dir, item)):
            resources.append((os.path.dirname('qt_plugins' + path[len(plugin_dir):]), [path]))
    else:
        resources.append((os.path.dirname(os.path.join('qt_plugins', item)), os.path.join(plugin_dir, item)))

可以解决这个问题。

代码缩进问题会导致py2app添加一个资源:

(‘qt_plugins/imageformat’,u'/Developer/Applications/Qt/plugins/imageformats/*') #注意,元组的第二项应该是列表,但这里是字符串

然后在py2app/build_app.py中:598

代码语言:javascript
复制
def iter_data_files(self):
    dist = self.distribution
    allres = chain(getattr(dist, 'data_files', ()) or (), self.resources)
    for (path, files) in (normalize_data_file(fn) for fn in allres):
        path = fsencoding(path)
        for fn in files:                      # <-- this line
            fn = fsencoding(fn)
            yield fn, os.path.join(path, os.path.basename(fn))

文件应该是一个列表,但现在它是一个字符串: u'/Developer/Applications/Qt/plugins/imageformats/*‘这将导致py2app复制路径中的文件:'/','D','e','v',...所以py2app开始迭代根路径'/',当它包围/.dbfseventsd时,它崩溃了。

票数 1
EN

Stack Overflow用户

发布于 2013-02-27 18:22:06

这看起来像是py2app中的一个错误。你能帮我检查一下在"/Developer/Applications/Qt/plugins/imageformats“中是否有一个名为".dbfseventsd”的文件(或者指向该文件的符号链接)吗?

另外,请向https://bitbucket.org/ronaldoussoren/py2app提交一个问题,以确保我不会忘记实际解决该问题。

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

https://stackoverflow.com/questions/15106383

复制
相关文章

相似问题

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