2017-01-02 36 views
0

我有一個Traits/UI(chaco)繪圖應用程序,它可以在我的根環境中正常運行Anaconda 64位安裝,位於64位Ubuntu 16.04上。但是,當我嘗試從我創建用於測試的32位環境運行它時,它失敗。在64位Ubuntu上運行在32位Anaconda環境中時,特徵/ UI(chaco)繪製應用程序中斷16.04

這似乎是默認爲「空」的圖形後端工具包出於某種原因,給了我一個堆棧跟蹤,從而結束正是如此:所以

File "/home/dbanas/anaconda2/envs/pybert_32/lib/python2.7/site-packages/enable/toolkit.py", line 40, in _init_toolkit format_exception_only(t, v)) ImportError: Unable to import the image backend for the null toolkit (reason: ['ImportError: libGL.so.1: cannot open shared object file: No such file or directory\n']).

,我意識到,我沒有我的系統上安裝了32位Gtk +庫支持。我安裝了。而且,現在,當我在32位環境中啓動它時,應用程序段出現故障!這裏是堆棧跟蹤,從GDB:

> #0 0xf76e7f10 in ??() from /lib/ld-linux.so.2 
> #1 0xf76e8a4b in ??() from /lib/ld-linux.so.2 
> #2 0xf76ea7c9 in ??() from /lib/ld-linux.so.2 
> #3 0xf76f26bf in ??() from /lib/ld-linux.so.2 
> #4 0xf76ee204 in ??() from /lib/ld-linux.so.2 
> #5 0xf76f1f02 in ??() from /lib/ld-linux.so.2 
> #6 0xf74febf5 in ??() from /lib/i386-linux-gnu/libdl.so.2 
> #7 0xf76ee204 in ??() from /lib/ld-linux.so.2 
> #8 0xf74ff30d in ??() from /lib/i386-linux-gnu/libdl.so.2 
> #9 0xf74fec9e in dlopen() from /lib/i386-linux-gnu/libdl.so.2 
> #10 0xf76523e6 in _PyImport_GetDynLoadFunc (fqname=0x8b72188 "PyQt4.QtCore", shortname=0x8b7218e "QtCore", 
>  pathname=0x8b73190 "/home/dbanas/anaconda2/envs/pybert_32/lib/python2.7/site-packages/PyQt4/QtCore.so", 
> 
>  fp=0x8981b98) at Python/dynload_shlib.c:130 
> #11 0xf7636512 in _PyImport_LoadDynamicModule (name=0x8b72188 "PyQt4.QtCore", 
>  pathname=0x8b73190 "/home/dbanas/anaconda2/envs/pybert_32/lib/python2.7/site-packages/PyQt4/QtCore.so", 
> 
>  fp=0x8981b98) at ./Python/importdl.c:42 
> #12 0xf76343c0 in load_module (name=0x8b72188 "PyQt4.QtCore", fp=<optimized out>, 
>  pathname=0x8b73190 "/home/dbanas/anaconda2/envs/pybert_32/lib/python2.7/site-packages/PyQt4/QtCore.so", 
> type=3, 
>  loader=0x0) at Python/import.c:1937 
> #13 0xf7634c43 in import_submodule (mod=0xf2b9c26c, subname=0x8b7218e "QtCore", fullname=0x8b72188 "PyQt4.QtCore") 
>  at Python/import.c:2725 
> #14 0xf7634ebc in load_next (mod=0xf2b9c26c, altmod=0xf2b9c26c, p_name=0xff97d7fc, buf=0x8b72188 "PyQt4.QtCore", 
>  p_buflen=0xff97d7f8) at Python/import.c:2539 
> #15 0xf76354fb in import_module_level (level=-1, fromlist=0xf2b33c8c, locals=<optimized out>, globals=0xf2b2de84, 
>  name=0x0) at Python/import.c:2256 
> #16 PyImport_ImportModuleLevel (name=0xf2b35264 "PyQt4.QtCore", globals=0xf2b2de84, locals=0xf2b2de84, 
>  fromlist=0xf2b33c8c, level=-1) at Python/import.c:2312 
> #17 0xf7615e76 in builtin___import__ (self=0x0, args=0xf2b352fc, kwds=0x0) at Python/bltinmodule.c:49 
> #18 0xf75b6188 in PyCFunction_Call (func=0xf72cf78c, arg=0xf2b352fc, kw=0x0) at Objects/methodobject.c:85 
> #19 0xf756bb9c in PyObject_Call (func=0xf72cf78c, arg=0xf2b352fc, kw=0x0) at Objects/abstract.c:2547 
> #20 0xf7616454 in PyEval_CallObjectWithKeywords (func=0xf72cf78c, arg=0xf2b352fc, kw=0x0) at Python/ceval.c:4221 
> #21 0xf761a8aa in PyEval_EvalFrameEx (f=0xf4ba19cc, throwflag=0) at Python/ceval.c:2624 
> #22 0xf761ff25 in PyEval_EvalCodeEx (co=0xf2b361d0, globals=0xf2b2de84, locals=0xf2b2de84, args=0x0, argcount=0, 
>  kws=0x0, kwcount=0, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3584 
> ---Type <return> to continue, or q <return> to quit--- 

所以,我只是做了一些進展:

使下面的代碼改變,在我的Python應用程序:

from traits.trait_base import ETSConfig 
# ETSConfig.toolkit = 'qt4' 
ETSConfig.toolkit = 'wx' 

產生了一些有益的錯誤消息被打印到我的控制檯,關於缺少的庫。經過幾次迭代的序列:

dpkg -S libGLU.so.1 
sudo apt-get install libglu1-mesa:i386 

我的應用程序出現了!然而,GUI的顏色都搞砸了,當我第一次啓動它,我得到以下消息的警告對話框:

iCCP: known incorrect sRGB profile 07:07:37

所以,現在,我有兩個問題:

  1. 如何修復「wx」版本的顏色?
  2. 我該如何獲得「qt4」版本以提供有關丟失庫的有用信息,而不僅僅是seg。斷層?

啊哈!安裝這些缺少的32位庫已修復seg。錯誤,我的「qt4」版本也在運行。而且,GUI的顏色是正確的! :)

回答

0

問題是缺少32位庫,這並不奇怪,因爲我運行的是64位Ubuntu。然而,讓系統告訴我失蹤需要改變從QT4後端Python的GUI應用程序的WX後端哪些庫,就像這樣:

from traits.trait_base import ETSConfig 
# ETSConfig.toolkit = 'qt4' 
ETSConfig.toolkit = 'wx' 

的32位庫通過試圖讓「wx」模式運行來提示執行的安裝,也足以讓「qt4」模式運行。而且,這很重要,因爲「wx」模式會產生愚蠢的GUI顏色,而「qt4」模式會產生正確的GUI顏色。

相關問題