2014-06-29 51 views
1

我正在使用pyinstaller將python腳本轉換爲Ubuntu(14.04)中的二進制文件。我使用Canopy(Enthought)來管理所有的python庫。pyinstaller錯誤:找不到scipy(沒有名爲_ufuncs_cxx的模塊)

該代碼使用networkx,numpy和scipy。這裏是我的規格文件:

# -*- mode: python -*- 
a = Analysis(['main_test.py'], 
      pathex=['/home/sean/Desktop/prog',], 
      hiddenimports=[], 
      hookspath=None, 
      runtime_hooks=None) 
pyz = PYZ(a.pure) 
exe = EXE(pyz, 
      a.scripts, 
      exclude_binaries=True, 
      name='main_test', 
      debug=False, 
      strip=None, 
      upx=True, 
      console=True) 
coll = COLLECT(exe, 
       a.binaries, 
       a.zipfiles, 
       a.datas, 
       strip=None, 
       upx=True, 
       name='main_test') 

起初,我得到了錯誤:

ImportError: libmkl_gf.so: cannot open shared object file: 
    No such file or directory 

然後我發現.so庫中

/home/sean/Canopy/appdata/canopy-1.3.0.1715.rh5-x86/lib 

我手動複製幾個.so文件到發展方向。

但是,我得到了另一個錯誤:

File "/home/sean/Enthought/Canopy_32bit/User/lib/python2.7/site- 
     packages/PyInstaller/loader/pyi_importers.py", line 409, in load_module 
     module = imp.load_module(fullname, fp, filename, self._c_ext_tuple) 
    File "_ufuncs.pyx", line 1, in init scipy.special._ufuncs 
     (scipy/special/_ufuncs.c:21824) 
ImportError: No module named _ufuncs_cxx 

如何解決這個問題?我應該如何修改spec文件來添加這些庫和模塊?

編輯:

我發現solutuion。我現在的問題是:如何修改spec文件來添加.so圖書館?現在我要了一些.so文件的碼的手動複製到dist目錄...

EDIT2

事實證明,我必須將它添加到COLLECT

a.binaries + ["libmkl_gf.so" , 
    "/home/sean/Canopy/appdata/canopy-1.3.0.1715.rh5-x86/lib/libmkl_gf.so", 
    "binaries"] 

是有沒有簡單的方法來找到隱藏的導入或庫?

謝謝

回答

1

您是否想嘗試將庫路徑添加到LD_LIBRARY_PATH中? 類似,

出口LD_LIBRARY_PATH = /家庭/肖恩/敞篷/ APPDATA /天篷1.3.0.1715.rh5-86/lib目錄

出口LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/首頁/肖恩/Canopy/appdata/canopy-1.3.0.1715.rh5-x86/lib(如果已經由管理員設置) 這樣在運行時,該文件夾中的所有.so都不會給你鏈接錯誤...

哦,我明白你的意思了,

進口SYS

sys.path.append( 'your_lib_path')

這應該工作。

3

我剛剛從解決問題出來。我必須使用--hidden-import標誌指定缺少的模塊。有很多人失蹤,但我注意到他們中的大部分都來自scipy.integrate。所以我指定:

pyinstaller --hidden-import=scipy.integrate --hidden-import=scipy.integrate.quadpack --hidden-import=scipy.integrate._vode bla bla bla bla -F --windowed myscript.py 

痛苦的,但工作

相關問題