2013-02-27 45 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