2017-08-30 47 views
2

我在我的文件系統上有一個自定義Python包(稱爲MyProject),其中包含setup.pyrequirements.txt。該軟件包需要由Flask服務器(將部署在AWS/EC2/EB上)使用。用`pip`部署一個自定義python包

在我的Flask項目目錄中,我創建了一個virtualenv並運行pip install -e ../path/to/myProject

但由於某些原因,的MyProject上游的git回購在pip freeze顯示出來:

... 
llvmlite==0.19.0 
-e git+https://github.com/USERNAME/[email protected]{some-git-hash} 
python-socketio==1.8.0 
... 

與git的參考是一個問題,因爲倉庫是私人和部署服務器沒有(和不應該,並且永遠不會)具有訪問它的憑據。部署服務器甚至沒有安裝git(並且它似乎是非常有問題的,因爲pip假定沒有我的許可)。 MyProjectrequirements.txtsetup.py沒有任何暗示git,所以我不知道這是從哪裏來的。

我可以欺騙項目到項目瓶的子目錄,然後把下面的MyFlaskProject的requirements.txt:

... 
llvmlite==0.19.0 
./MyProject 
python-socketio==1.8.0 
... 

但是,這並不工作,因爲路徑作爲相對於運行時的pip進程的工作目錄,而不是requirements.txt。確實,它似乎是pip is broken in this respect。在我的情況下,EC2從其他目錄運行其安裝腳本(具有指定的requirements.txt的完整路徑),並且如預期的那樣,這會失敗。

將自定義Python包部署爲另一個項目的依賴關係的正確方法是什麼?

+0

它是否與絕對路徑一起工作? –

+0

@SimonHobbs:不,因爲絕對路徑是由部署服務器決定的。它與我的機器不同,不在我的控制之下,可能會從部署變爲部署。 – trbabb

回答

0

要安裝從混帳回購自己的Python包,你可能要檢查this post

理清憑證的問題,爲什麼沒有安裝在EC2混帳?您可以簡單地創建一個ssh密鑰並與MyProject存儲庫共享。

我在Jenkins部署的ECS實例上使用這個解決方案(Habitus在構建映像時隱藏Jenkin的ssh密鑰),它對我來說工作正常!