有一些細微的差別如何PIP作品。不幸的是,使用--prefix vendor
來存儲項目的所有依賴關係是行不通的,如果任何這些依賴關係或依賴關係的依賴關係被安裝到pip可以找到它們的地方。它會跳過這些依賴關係,並將其餘的安裝到您的vendor
文件夾中。
以前我用virtualenv的--no-site-packages
選項來解決這個問題。在一家公司,我們將發佈整個virtualenv,其中包括python二進制文件。爲了只運送依賴關係,您可以使用virtualenv與pip上的--prefix
開關結合使用,爲您提供一個安裝在正確位置的乾淨環境。
我將提供一個示例腳本,用於創建臨時virtualenv,激活它,然後將依賴項安裝到本地vendor
文件夾。如果您在CI中運行,這很方便。
#!/bin/bash
tempdir=$(mktemp -d -t project.XXX) # create a temporary directory
trap "rm -rf $tempdir" EXIT # ensure it is cleaned up
# create the virtualenv and exclude packages outside of it
virtualenv --python=$(which python2.7) --no-site-packages $tempdir/venv
# activate the virtualenv
source $tempdir/venv/bin/activate
# install the dependencies as above
pip install -r requirements.txt --prefix=vendor
不認爲有一個標準的方法來做到這一點。 – cel
爲什麼不使用requirements.txt和依賴關係?或者運行'pip install -r requirements.txt'是不行的? – valignatev
我認爲你必須創建一個捆綁的可執行文件,其中有各種工具。順便說一句,如果你有「devops人」,並且不能部署你自己,*這不是devops *。 – jonrsharpe