2013-12-12 15 views
1

我試圖通過Github項目凍結Travis CI內的Python應用程序。我成功地在Travis中通過pip成功調用了freeze.py實用程序的安裝,但是當我嘗試凍結它運行的Python程序時,卻沒有生成構建可執行文件所需的必要C和Makefile。凍結Travis CI上的Python應用程序

這是我.travis.yml

language: python 
python: 
    - "2.7" 

# Command to install dependencies 
install: "pip install freeze" 

# Command to build with `rake` 
script: rake default 

,這是我的Rakefile:

# 
# Rakefile to build standalone `secho` Unix-like executable program on Travis CI. 
# To build on your own system; please use `make` instead. 
# 
freeze = "python /home/travis/virtualenv/python2.7/lib/python2.7/site-   packages/pip/commands/freeze.py" 
io = "secho" 

task :default => [:freeze, :compile] 

task :freeze do 
    sh "python #{io}.py python test output - OK" 
    sh "#{freeze} #{io}.py" # This runs but there is no console output & nothing generated. 
end 

task :compile do 
    sh "ls" 
    sh "make -f Makefile" 
    sh "strip #{io}" 
    sh "rm -f Makefile *.o *.c" 
    sh "./#{io} compiled test output - OK" 
end 

task :clean do 
    sh "rm -f #{io}" 
end 

task :test do 
    puts "dummy test" 
end 

只有運行在第一個任務:freeze與Python腳本似乎已成功完成。我做錯了什麼?

非常感謝,

山姆。

https://github.com/stpettersens/super-echo

+0

我有點困惑。用pip作爲依賴項安裝的'freeze'包與「pip freeze」命令無關。 「pip.commands.freeze」模塊不能像你想要做的那樣作爲腳本運行。運行'pip freeze'就可以運行'sh'pip freeze''。但我不認爲這就是你想要做的。 – Iguananaut

回答

1

我想我看到這裏發生了什麼。也許你讀了this question,它有一個答案,暗示freeze.py住在一個pip模塊中,甚至不能作爲腳本直接運行(你可以通過閱讀它的源代碼來確認,它只包含一個類定義)。

但我想你要找的是freeze.py工具,它附帶了Python的源代碼。據我所知,這是不正常安裝的,只是一個包含在源代碼中的工具:http://hg.python.org/cpython/file/5f5e1d408c0c/Tools/freeze

如果你正在尋找一種工具來凍結你的腳本作爲一個獨立的可執行文件,你可能想看看成cx_FreezePyInstaller之類的東西。包含在Python中的凍結工具並沒有真正維護或使用,我不這麼認爲。除了最近的工作,以保持Python 3兼容。

+0

感謝您的幫助。我只是想運行'freeze.py'工具來生成必要的C代碼和'Makefile',以便我可以調用編譯器。我可以通過'pip'安裝'cx_Freeze'然後運行它嗎?這也會起作用。 –

+0

這種取決於你想要完成什麼,但'cx_Freeze'例如不輸出一個C文件或一個Makefile - 它只是輸出一個二進制可執行文件而不需要你編譯它。它也(默認情況下)會生成一個包含所有Python模塊的.zip文件,儘管可以調整細節。看看文檔,看看它是否滿足你的需求。 – Iguananaut

+0

只是想要可執行文件,所以我想要的。謝謝。我可以在Travis下安裝嗎? –