python使用devpi實現(xiàn)鏡像源代理完整指南
1、背景與目標
背景1(訪問速度優(yōu)化):
- 直接用pip安裝包會訪問官方源,在國內速度很慢,通常用pip的清華/阿里云源替代。
- 但即便如此,這些遠程pypi源網(wǎng)速也不穩(wěn)定,而且比如pytorch/tensorflow這種幾百兆的大型包,下載仍然費時,如果給新人配環(huán)境,還要重復下載。
- 這就需要一個緩存pypi服務器來做中轉,在內網(wǎng)中下載緩存包,相當于直接拷貝,配環(huán)境速度起飛。
期望:
- 緩存機制:內置緩存機制,提升包下載速度,節(jié)省帶寬(優(yōu)化訪問速度)。
- 簡易配置:通過簡單的配置即可快速部署和使用,降低維護成本(考慮docker部署)。
- 靈活部署:支持多種部署方式,可單機使用,也支持多服務器分布式部署(支持掛載公共對象存儲、文件存儲)。
背景2(私有鏡像包):
- 私有倉庫:期望僅用于內網(wǎng),局域網(wǎng)的軟件包。
- 版本控制:更近于一步的,用戶期望創(chuàng)建和管理私人PyPI服務器上的索引,實現(xiàn)包的版本控制。
- 權限控制:提供用戶和權限管理,確保包的安全性。
技術選型:
常見的緩存代理方案:devpi 緩存代理, Nexus 緩存代理, JFrog Artifactory 緩存代理
Nexus:維護成本較高,雖然支持py以外的源但是目前用不上
JFrog Artifactory:需要商業(yè)授權,并且維護成本較高,僅支持集群部署
devpi:因此devpi是目前最合適的方案
pypi-server :官方推薦的一個服務器,但主要用做上傳私有包。上傳方便,直接拷貝安裝包到文件夾即可。但目前沒查到緩存已下載包的方法,使用時和其他源是并列關系。
bendersnatch : 功能也很強大,但會把源鏡像的包全部同步到本地,需要大量存儲空間。
2、devpi-server 服務端搭建
devpi的組成
需要python>=3.7
使用版本 devpi2.2.0, devpi-client5.2.3, devpi-server==6.4.0
雖然包名叫devpi,但在當前版本(devpi-server==6.4.0),功能已經被分為客戶端 devpi-client 和服務端 devpi-server
devpi-client: 直接使用devpi的命令調用的,專門管理已經啟動的服務(index,user等指令)
devpi-server: 加參數(shù)用來啟動服務器的。只有先啟動devpi服務,client才能控制(use指令)
devpi-web: 一個網(wǎng)頁版客戶端,和cli版本的功能互相補全(或者說兩個客戶端功能都殘廢)。
網(wǎng)頁地址和 index_url 相同。網(wǎng)頁上可以搜索包名,點擊對應版本的安裝包可以直接下載。如果已經緩存過,描述中會顯示文件大小,反之說明沒有本地緩存。
devpi-init: 最新版本下(devpi-server 6.14.0),使用配置文件初始化devpi的方式。
devpi配置:目前還沒有找到一步到位配置devpi的方法。
首次啟動服務器時,mirror_url不能通過config文件傳遞給程序,只能用上文方式登陸后再修改。但還好,只需要配置一次。這些配置文件會存放在server目錄中的數(shù)據(jù)庫文件。
devpi-server 服務搭建
# 虛擬環(huán)境 python3 -m venv devpi source devpi/bin/activate # 安裝 pip install devpi-server devpi-server --version # devpi-server 6.14.0 devpi --version # devpi-client 7.2.0 # 初始化 # devpi的配置和緩存安裝包的文件夾。不指定目錄默認為~/.devpi/server # devpi-init --serverdir=[PATH] rm -rf ~/.devpi/server devpi-init --configfile devpi-server.yml devpi-server --configfile devpi-server.yml # 啟動服務 # http://localhost:3141/ devpi-server --host=[HOST] --port=[PORT] --serverdir=[PATH] devpi-server
手動配置索引
# 切換到指定索引 devpi use http://localhost:3141 lsof -i :3141 # 用戶管理 devpi user -l # 查看用戶列表 devpi login root --password '' # 默認用戶為root 密碼為空 devpi user -m root password=123 # 修改密碼為123 devpi user -c user1 password=123 # 創(chuàng)建新用戶 devpi login user1 --password=123 devpi logout # 索引管理 # 第一次啟動后,會自動從python官方源下載索引 # 每個用戶可以創(chuàng)建多個index,index直接還可以繼承,默認為root/pypi devpi upload --index user1/thu # 上傳包 devpi index -c user1/thu bases=root/pypi # 創(chuàng)建索引 devpi use user1/thu # 使用索引 devpi index root/pypi # 查看索引配置 # http://localhost:3141/root/pypi: # type=mirror # volatile=False # mirror_url=https://mirrors.aliyun.com/pypi/simple/ # mirror_web_url_fmt=https://mirrors.aliyun.com/pypi/simple/{name}/ # title=PyPI
索引鏡像源切換
# 切換鏡像源地址=>阿里云 # 同步完成后,會刪除舊索引,索引都在indices文件夾中 # 網(wǎng)頁地址:http://localhost:3141/root/pypi ,或者看 devpi-server 的日志 devpi login root --password '' devpi index root/pypi "mirror_web_url_fmt=https://mirrors.aliyun.com/pypi/simple/{name}/" "mirror_url=https://mirrors.aliyun.com/pypi/simple/" devpi index root/pypi "mirror_web_url_fmt=https://pypi.tuna.tsinghua.edu.cn/simple/{name}/" "mirror_url=https://pypi.tuna.tsinghua.edu.cn/simple/" # 嘗試切換多個源 devpi index --delete root/thu devpi index -c root/thu devpi index root/thu "mirror_web_url_fmt=https://pypi.tuna.tsinghua.edu.cn/simple/{name}/" "mirror_url=https://pypi.tuna.tsinghua.edu.cn/simple/"
上傳私有包
devpi 的 index有兩種類型,mirror 和 stage,前者就是默認使用的,拉取遠程鏡像,但不能傳文件到這個 index中。
這時需要創(chuàng)建新的 index,指定 stage 類型。然后 devpi use 這個 index,再 devpi upload 本地包。(更多的操作例如本地發(fā)布包,也有對應的指令)
當我下載時,devpi 會先搜索上傳的包,如果沒有找到依然能通過 mirror 的 index 來下載,則可以修改 bases,指向 root/pypi,這樣就串聯(lián)起來了。
可能的dockerfile
# 使用官方的帶有Python的Ubuntu鏡像 FROM python:3.9-slim # 設置工作目錄 WORKDIR /root/ # 安裝 supervisor 和 devpi 相關包 RUN pip install supervisor RUN mkdir /devpi RUN pip install devpi-server devpi-web devpi-lockdown \ && devpi-init \ && devpi-gen-config --host 0.0.0.0 --port 3141 # 安裝 Nginx RUN apt-get update \ && apt-get install -y nginx # 復制 Nginx 配置文件和啟動腳本 COPY ./nginx-devpi.conf /etc/nginx/sites-enabled/default COPY ./run.sh /root/ # 暴露 devpi 和 Nginx 的端口 EXPOSE 3141 EXPOSE 80 # 設置啟動腳本 ENTRYPOINT ["bash", "run.sh"]
3、devpi 鏡像源使用
pip config 配置,和使用阿里云/清華源一樣
1、臨時使用
在pip install后添加 index_url 和 trusted_host
# 語法 pip install requests -i 鏡像URL --trusted-host 信任的域名 pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn # 可選源 清華:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:https://mirrors.aliyun.com/pypi/simple/ 豆瓣:https://pypi.doubanio.com/simple/ # devpi pip install -i "http://[host]/root/dev/+simple/" [package] --trusted-host [host] pip install -i "http://[user]:[password]@[host]/root/dev/+simple/" [package] --trusted-host [host] # 例子 pip install -i http://localhost:3141/root/pypi ansible pip install -i http://user1:123@localhost:3141/user1/thu ansible
2、長期使用
修改本地 pip.conf 文件,默認在~/.pip/pip.conf。
[global]
trusted-host=[HOST]
index-url=http://[HOST]:[PORT]/root/pypi/
# extra-index-url=http://mirrors.aliyun.com/pypi/simple/
timeout=120
以上就是python使用devpi實現(xiàn)鏡像源代理完整指南的詳細內容,更多關于python devpi代理鏡像源的資料請關注腳本之家其它相關文章!
相關文章
Python中卷積神經網(wǎng)絡(CNN)入門教程分分享
卷積神經網(wǎng)絡(Convolutional Neural Networks, CNN)是一類特別適用于處理圖像數(shù)據(jù)的深度學習模型,本文介紹了如何使用Keras創(chuàng)建一個簡單的CNN模型,并用它對手寫數(shù)字進行分類,需要的可以參考一下2023-05-05Python中defaultdict與lambda表達式用法實例小結
這篇文章主要介紹了Python中defaultdict與lambda表達式用法,結合實例形式分析了Python中defaultdict與lambda表達式的功能、使用方法及相關注意事項,需要的朋友可以參考下2018-04-04