2014-01-17 80 views
0

我正在開發一個跨平臺的應用程序,該應用程序從Linux和Windows的源目錄中提供額外的二進制文件。現在,我在* .spec文件中使用以下腳本來包含源目錄中的所有二進制文件。Pyinstaller - 從最終可執行文件中排除文件

##### include mydir in distribution ####### 
def extra_datas(mydir): 
    def rec_glob(p, files): 
     import os 
     import glob 
     for d in glob.glob(p): 
      if os.path.isfile(d): 
       files.append(d) 
      rec_glob("%s/*" % d, files) 
    files = [] 
    rec_glob("%s/*" % mydir, files) 
    extra_datas = [] 
    for f in files: 
     extra_datas.append((f, f, 'DATA')) 

    return extra_datas 
########################################### 

# append the 'data' dir 
a.datas += extra_datas('data') 

一切運作良好。現在的問題是,當我從Windows創建binay時,所有額外的linux二進制文件也在最終的可執行文件中生效。這使得最終的獨立版本可執行文件的大小更大。

有沒有辦法告訴pyinstaller從源目錄中執行某些文件/二進制文件。是否有可能執行某些* .so/* .dll這是真正不需要在最終的可執行文件?

我用發展如下: -

的Python 2.7

Pyinstaller 2.1

Debian的7對Linux

的Windows 7爲Win

任何幫助appriciated。

回答

1

確保只添加的文件列表中排除

def extra_datas(mydir,exclude=[]): 
    def rec_glob(p, files): 
     import os 
     import glob 
     for d in glob.glob(p): 
      if os.path.isfile(d): 
       files.append(d) 
      rec_glob("%s/*" % d, files) 
    files = [] 
    rec_glob("%s/*" % mydir, files) 
    return [(f, f, 'DATA') for f om files if f not in exclude] 

a.datas += extra_datas(some_dir,["something.txt","something.exe",...]) 

爲DLL的IM相當肯定有一個明確的exlude排除DLL的,通常會自動地被列入

[編輯]看到這個答案不包括DLL的https://stackoverflow.com/a/17595149/541038

+0

謝謝你的腳本。有效。但幾乎沒有修改。像這樣: - 'a.datas + = extra_datas(some_dir,[「path/to/something.txt」,「path/to/something.exe」,...])' –

相關問題