一、技术选型 (DevPi vs Nexus)
当然Python包管理源还有官方的PyPI , 但是这里主要说在企业内部构建自己的私有包管理源
| | |
|---|
| 中小型Python团队 | | Python专用 |
| 企业多语言环境 | | |
二、DevPi 安装部署
Python 项目部署建议独立虚拟环境
1、初始化虚拟环境
python3 -m venv /data/python-venv/venv-devpi-server/
2、安装相关依赖
pip3 install devpi-server devpi-client devpi-web pyramid pyramid-chameleon
3、初始化 devpi 环境
# 创建仓库目录mkdir -p /data/releases/python-devpi-server# 建立独立用户useradd --system --home /data/releases/python-devpi-server --shell /sbin/nologin devpi# 初始化仓库目录chown -R devpi:devpi /data/releases/python-devpi-serversudo -u devpi /data/python-venv/venv-devpi-server/bin/devpi-init --serverdir=/data/releases/python-devpi-server
注意初始化的日志
2026-02-10 14:35:43,894 INFO NOCTX Loading node info from /data/releases/python-devpi-server/.nodeinfo2026-02-10 14:35:43,894 INFO NOCTX generated uuid: 24745d088d88465886efd00e0007c6392026-02-10 14:35:43,895 INFO NOCTX wrote nodeinfo to: /data/releases/python-devpi-server/.nodeinfo2026-02-10 14:35:43,899 INFO NOCTX DB: Creating schema2026-02-10 14:35:43,985 INFO [Wtx-1] setting password for user 'root'2026-02-10 14:35:43,985 INFO [Wtx-1] created user 'root'2026-02-10 14:35:43,985 INFO [Wtx-1] created root user2026-02-10 14:35:43,985 INFO [Wtx-1] created root/pypi index2026-02-10 14:35:43,989 INFO [Wtx-1] fswriter0: committed at 0
如果给上面的初始化命令添加 --no-root-pypi 参数日志如下
2026-02-10 16:28:50,135 INFO NOCTX Loading node info from /data/releases/python-devpi-server/.nodeinfo2026-02-10 16:28:50,135 INFO NOCTX generated uuid: 947f1ad6d4cf494eb41436c19409839e2026-02-10 16:28:50,136 INFO NOCTX wrote nodeinfo to: /data/releases/python-devpi-server/.nodeinfo2026-02-10 16:28:50,139 INFO NOCTX DB: Creating schema2026-02-10 16:28:50,228 INFO [Wtx-1] setting password for user 'root'2026-02-10 16:28:50,228 INFO [Wtx-1] created user 'root'2026-02-10 16:28:50,229 INFO [Wtx-1] created root user2026-02-10 16:28:50,232 INFO [Wtx-1] fswriter0: committed at 0
注意区别
少了 [Wtx-1] created root/pypi index
这是本次的核心,默认不创建这个 root/pypi 那么仓库就是一个纯私有 的Python源仓库。 不会从Python的官方 PyPi 同步索引信息
这里默认创建了root 用户,这里的root用户不是Linux主机的root用户,是devpi-server仓库的root用户,密码默认是空的,要设置密码的话,在初始化命令后面接 --root-passwd some-passwd 即可
服务启动
这里直接给出systemd管理的service配置文件, 修改对应的路径之后就可以直接使用。
这里做了特殊设置,把日志输出到独立的日志文件,帮忙我们排查问题
# cat /etc/systemd/system/devpi-server.service[Unit]Description=devpi server (private PyPI repository)After=network.target[Service]Type=simpleUser=devpiGroup=devpiWorkingDirectory=/data/releases/python-devpi-serverExecStart=/data/python-venv/venv-devpi-server/bin/devpi-server --host=0.0.0.0 --port=3141 --serverdir=/data/releases/python-devpi-serverRestart=on-failureRestartSec=5# 日志重定向到文件StandardOutput=append:/var/log/devpi/devpi.logStandardError=append:/var/log/devpi/devpi.log[Install]WantedBy=multi-user.target
然后
- • systemctl enable devpi-server.service 开启自启动
- • systemctl start devpi-server.service 启动服务
然后通过浏览器访问 http://172.31.222.222:3141 就能打开web页面预览
devpi 使用
默认这里是没有索引的,然后登录创建新的索引,不设置 bases 继承源
# 登录devpi login root# 检查索引(这里为空)devpi index -l# 核心设置 (不添加 bases= 效果一样)devpi index -c colinspace bases=# 检查索引devpi index -lroot/colinspace# 查看索引详情devpi index root/colinspace
本地上传
构建本地sdk包之后,先记得登录下 devpi server
# 安装客户端命令pip install devpi-client# 登录devpi login root
核心上传命令如下
devpi upload --from-dir dist/file_upload of colinspace_sdk-0.2.0-py3-none-any.whl to http://172.31.2.25:3141/root/colinspace/file_upload of colinspace_sdk-0.2.0.tar.gz to http://172.31.2.25:3141/root/colinspace/
然后登录DevPi Web页面就可以看到刚刚上传的 SDK了
后续使用的时候直接指定源安装
pip install -i http://172.31.222.222:3141/root/colinspace/+simple/ colinspace-sdk --trusted-host 172.31.222.222
感谢你阅读文档,如有收获可以点赞、关注加收藏^_^ ,谢谢
有问题请后台留言,看到后会第一时间回复您。