2013-02-27 93 views
1

setup.py使用py2app包装pyside程序错误包括imageformats插件

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'], 
) 

蟒蛇setup.py py2app

... 
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 

回答

1

更改密码py2app /食谱/ pyside.py:21

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))) 

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/imageformats' U '/开发/应用/ QT /插件/ imageformats/*')#注意的第二个项目元组应该是一个清单,但它是一个字符串这里

然后在py2app/build_app.py:598

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'/开发商/应用程序/ Qt /插件/ imageformats/*' 这将导致py2app co py文件的路径:'/','D','e','v',... 因此py2app开始迭代根路径'/',当它包含/.dbfseventsd时,它崩溃了。

0

这看起来像在py2app的错误。如果在“/ Developer/Applications/Qt/plugins/imageformats”中有一个名为“.dbfseventsd”的文件(或指向该文件的符号链接),您可以检查我吗?

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

+0

嗨,Ronald Oussoren,在“/ Developer/Applications/Qt/plugins/imageformats”中似乎没有“.dbfseventsd”。但是有一条根路径。 – ax003d 2013-02-27 10:39:44

+0

你是如何安装PySide和Qt的?您是否使用了中引用的二进制文件? – 2013-02-27 13:18:20

+0

是的,我从该链接安装了PySide和Qt。 @Ronald Oussoren。 – ax003d 2013-02-27 13:58:55