2015-06-10 35 views
5

我通常使用一個相當簡單的結構腳本來部署我的Flask應用程序,它將源代碼放到目標機器上,使用pip來安裝任何依賴項,然後用所有必要的設置啓動uwsgi並關閉它去。Python/Flask deployment without pip

但是,我有一個新問題,即我們環境中的一些新安全設置阻止了我們在網絡外訪問,因此嘗試使用pip來安裝我們的依賴關係失敗。我研究了使用python setup.py sdist來創建一個軟件包,它可以在開發人員機器上構建所有東西,然後我可以將.tar.gz上傳到部署機器並安裝它,但它仍然試圖聯繫pip以獲取依賴關係。

有沒有辦法讓一個完全編譯的軟件包具有依賴關係以及我可以用來部署到我的服務器的所有東西?有一些sdist設置我可以使用?

回答

2

假設你的構建機器與目標二進制兼容,或者你不需要任何編譯的擴展,可以使用pip wheel編譯你的項目和它的所有依賴於車輪,將這些文件複製到服務器,並pip install僅來自輪子目錄。

# on build machine 
cd myproject 
pip wheel --wheel-dir wheelbase . 
scp -r wheelbase [email protected] 

# on target machine 
pip install --no-index --find-links=wheelbase myproject 

你應該能夠奇sdist複製到--find鏈接的目錄,以及,在這種情況下,PIP將安裝從sdist,如果你必須重新編譯服務器上。

+0

這看起來很有希望。我試過你的方式,它似乎沒有安裝我需要的所有軟件包。我試圖從requirements.txt文件建立輪子,它似乎現在可以獲得我所有的軟件包,但是當我試圖將它們安裝到盒子上時,我得到了MarkupSafe-0.23-cp27-none-linux_i686.whl在此平臺上不受支持。我看着輪子目錄,它有那個輪子。我的開發機器是Ubuntu,我的目標是CentOS。有什麼建議麼? – ThrowsException

+0

下載MarkupSafe sdist並將其放在wheel目錄中。 Pip應該足夠聰明以構建目標機器。或者只是建立在CentOS虛擬機上。 https://pypi.python.org/pypi/MarkupSafe – joeforker

+0

謝謝。我最終做了後者。建立在現有的centos機器上並將wheeldir複製過來。似乎擁有我現在需要的一切。 – ThrowsException