前一段時間開發(fā)需要經(jīng)常使用 pip 下載,雖然把 pip 源改成了國內(nèi)源,但我對速度還是不滿意,更為重要的是集成
測試環(huán)境是離線的,要在集成測試環(huán)境開發(fā)顯然需要搭建自己的本地 pip源。在使用 devpi 之前我曾使用過 pip2pi,但有個 bug 導(dǎo)致離線環(huán)境下的 tox 命令總是失敗,所以最后采用 devpi 搭建 pip源。這里使用 docker 部署,方便又快速,如果不小心弄崩了也只需要重新運行docker容器就好了。如果你的環(huán)境沒有安裝 docker 可以自行搜素安裝方法,比如 docker 社區(qū)的文檔 install docker(https://docs.docker.com/install/)。如果你是 centos 用戶,可以使用以下方法安裝
sudo yum update
sudo yum -y install docker
sudo systemctl enable docker
sudo systemctl start docker接下來使用使用 docker 部署一個 python 本地鏡像源,我們可以使用 docker hub 上已有的鏡像,我這里選擇的是
muccg/devpi(https://hub.docker.com/r/muccg/devpi) 這個鏡像
# 設(shè)置 devpi 服務(wù)器管理員密碼
devpi_password = 123
mkdir -p /src/docker/devpi
mkdir /tmp/wheelhouse
docker run -d --name devpi \
--publish 3141:3141 \
--volume /tmp/wheelhouse:/wheelhouse
--volume /srv/docker/devpi:/data \
--env=devpi_password=$devpi_password \
--restart always \
muccg/docker-devpi
接著先在本地下載好所需的wheel包,requirements.txt文件內(nèi)容即為我們需要的 python 庫列表
pip wheel --wheel-dir /tmp/wheelhouse -r requirements.txt
如果從 pip 源下載的庫已經(jīng)是 wheel 包的話文件將會被直接放在 /tmp/wheelhouse 內(nèi),如果是
tar 包,pip 會先 build 出 wheel 包,這可能需要一些時間。下載完成后 wheelhouse 內(nèi)容類似
于
ll /tmp/wheelhouse
total 524k
-rwxrwxrwx 1 rookie rookie 155k apr 6 23:40 certifi-2019.3.9-py2.py3-none-any.whl
-rwxrwxrwx 1 rookie rookie 131k apr 6 23:40 chardet-3.0.4-py2.py3-none-any.whl
-rwxrwxrwx 1 rookie rookie 58k apr 6 23:40 idna-2.8-py2.py3-none-any.whl
-rwxrwxrwx 1 rookie rookie 57k apr 6 23:40 requests-2.21.0-py2.py3-none-any.whl
-rwxrwxrwx 1 rookie rookie 116k apr 6 23:40 urllib3-1.24.1-py2.py3-none-any.whl
下載完成后如果本地環(huán)境安裝了devpi客戶端,可以直接上傳 wheel 包,不過由于我們在創(chuàng)建容器時已經(jīng)
把 wheelhouse 文件夾掛載進(jìn)去,也可以在在容器里直接操作
# 進(jìn)入容器
docker exec -it -u root devpi bash
# 登陸并上傳
devpi use http://<host_ip>:3141/root/public --set-cfg
devpi login root 123
devpi upload --from-dir /wheelhouse
上傳完成后可以使用 http://<host_ip>:3141 查看 pip 本地源服務(wù)器狀態(tài)。
若要臨時使用可以使用 pip install 的 –index 和 –trusted-host 選項
pip install --index http://<host_ip>:3141/root/public/+simple/ \
--trusted-host <host_ip>
或者修改 pip.conf 文件永久使用
# vim ~/.pip/pip.conf
[global]
index_url = http://<host_ip>:3141/root/public/+simple/
trusted-host = <host_ip>
[search]
index = http://<host_ip>:3141/root/public/