2012-01-17 103 views
4

我使用PyInstaller將兩個腳本轉換爲一個可執行文件,其中一個調用另一個。我遇到的問題是我無法弄清楚如何捆綁兩個腳本,仍然讓他們相互引用:在PyInstaller中打包多個腳本

導致問題的代碼是一個腳本,script1.py包含:

subprocess.call(['gksudo','python script2.py']) 

這很好,當我正常運行腳本,但一旦他們打包在PyInstaller我不知道如何使電話工作。

回答

1

我不認爲pyinstaller可以自己處理這種捆綁,至少我沒有設法配置它,如果可能的話。我也有一個相當大的應用程序在何處

subprocess.Popen幾個電話( '蟒蛇' ......)

完成。我終於做到了工作方式是:

  1. 修改您的通話子到不同的蟒蛇,就像subprocess.call(['gksudo','./python script2.py'])。創建兩個單獨的分析,一個爲切入點,以及一個用於腳本的其餘部分,你的情況:

    A1 - script1.py分析 A2 - script2.py的分析

  2. 創建只有從入口點腳本的exe:

    pyz = PYZ(a1.pure) 
    exe = EXE(pyz, 
        a1.scripts, 
        exclude_binaries=1, 
        name={name here}, 
        debug=False, 
        strip=False, 
        upx=True, 
        console=1) 
    
  3. 所有腳本收集

    coll = COLLECT(exe, 
         a1.binaries, 
         a1.zipfiles, 
         a1.datas, 
         a2.binaries, 
         a2.zipfiles, 
         a2.datas, 
        python_tree, 
         *additional_trees, 
         strip=False, 
         upx=True, 
         name={}) 
    
  4. 在您的那個在與沒有被pyinstaller發現任何附加要求所有子進程調用指定的位置分配複製蟒蛇(我有幾個像matplotlib,pylab等)

  5. 創建一個啓動腳本,首先改變任何所需的環境變量指向你的包,然後啓動應用程序。在我的情況下,需要的是,從調用目錄:

    export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH 
    export LD_RUN_PATH=`pwd`:$LD_RUN_PATH 
    

現在,所有的這些,如果我想在機器上,要麼有沒有安裝Python或如果他們已經安裝了Python運行應用程序被要求,請確保應用程序仍使用分發包中的所有庫而不是任何本地庫。如果你的情況python已經安裝在目標機器上,我不認爲像這樣的任何東西是必要的,前3步就足夠了。