惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Proofpoint News Feed
D
Docker
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
L
LINUX DO - 最新话题
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Forbes - Security
Forbes - Security
MongoDB | Blog
MongoDB | Blog
Attack and Defense Labs
Attack and Defense Labs
Webroot Blog
Webroot Blog
A
About on SuperTechFans
Schneier on Security
Schneier on Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
Microsoft Azure Blog
Microsoft Azure Blog
F
Fortinet All Blogs
IT之家
IT之家
The Last Watchdog
The Last Watchdog
腾讯CDC
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
B
Blog
Recorded Future
Recorded Future
博客园_首页
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
SegmentFault 最新的问题
Security Archives - TechRepublic
Security Archives - TechRepublic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hacker News: Front Page
T
Threatpost
H
Heimdal Security Blog
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
如何使用 devpi 搭建 PyPI Server
微信公众号 · 2018-03-04 · via 陈少文的网站

Please enable Javascript to view the contents

使用 pip 命令安装 Python 包时,默认去 https://pypi.python.org/simple/ 源查找相应的包,下载并安装。但是在内网环境,或者需要发布一些私有包提供给指定用户时,就需要搭建自己的 PyPI Server。本篇主要记录使用 devpi 工具搭建 PyPI Server 源的过程,以及记录一些常用命令。

1. PyPI Server 比较

PyPI ServerPyPI 代理镜像本地缓存单元测试系统测试搜索
devpi支持支持★★★★★★★★★支持 Web + XML RPC
DjangoPyPI支持不支持支持 Web + XML RPC
chishop不支持不支持不支持
pypiserver支持不支持★★★★★不支持
Cheese Shop不支持不支持★★支持 Web + XML RPC
localshop支持支持★★★★只支持 XML RPC
mypypi不支持不支持★★不支持
proxypypi支持支持不支持
Flask-Pypi-Proxy支持支持不支持

2. devpi 特有的功能

2.1 索引继承

pypiserver 等只支持两个索引: 私有的索引和公有的索引。 在私有索引上找不到 Python 包时, 就会去公有索引上找。 devpi 对这一功能做了扩展, devpi 可以支持多个索引。同时,新索引可以继承之前的索引,这在维护多版本系统上十分有用。

2.2 支持集群部署

支持一台或多台服务器部署,来加速访问。还支持通过 json 接口,实时监控集群的状态。

2.3 支持导入导出功能

支持导出服务器状态,并在必要时重新导回服务器,恢复服务器状态。

2.4 Jenkins 集成

支持给索引设置 Jenkins 触发器,可以使用 tox 自动测试上传的包。

3. 搭建 devpi server

devpi 包含三个组件:

  • devpi-server,是 devpi server 核心组件,提供镜像与缓存功能
  • devpi-web,提供 Web 界面与查询功能
  • devpi-client,命令行工具, 提供包上传等与服务器交互的功能

3.1 安装 devpi

3.2 启动 devpi server 服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[chenshaowen@localhost ~]devpi quickstart
-->  /home/chenshaowendevpi-server --version
-->  /home/chenshaowendevpi-server --start --init
...
-->  /home/chenshaowendevpi index -c dev
http://localhost:3141/chenshaowen/dev:
  type=stage
  bases=
  volatile=True
  acl_upload=chenshaowen
  acl_toxresult_upload=:ANONYMOUS:
  mirror_whitelist=
  pypi_whitelist=

-->  /home/chenshaowendevpi use dev
current devpi index: http://localhost:3141/chenshaowen/dev (logged in as chenshaowen)
/home/chenshaowen/.pip/pip.conf: no config file exists
~/.pydistutils.cfg     : no config file exists
~/.buildout/default.cfg: no config file exists
always-set-cfg: no
COMPLETED!  you can now work with your 'dev' index
  devpi install PKG   # install a pkg from pypi
  devpi upload        # upload a setup.py based project
  devpi test PKG      # download and test a tox-based project
  devpi PUSH ...      # to copy releases between indexes
  devpi index ...     # to manipulate/create indexes
  devpi use ...       # to change current index
  devpi user ...      # to manipulate/create users
  devpi CMD -h        # help for a specific command
  devpi -h            # general help
docs at http://doc.devpi.net

通过 http://localhost:3141 访问页面:

可以看到新建了两个索引,一个是 root 的,一个是当前操作用户的。通过命令,可以查看索引信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
devpi  getjson /root
{
    "result": {
        "indexes": {
            "pypi": {
                "mirror_url": "https://pypi.python.org/simple/",
                "mirror_web_url_fmt": "https://pypi.python.org/pypi/{name}",
                "title": "PyPI",
                "type": "mirror",
                "volatile": false
            }
        },
        "username": "root"
    },
    "type": "userconfig"
}

由于 root 的索引配置了 mirror_url ,相当于在本地建立了一个附加的 Pypi 源, https://pypi.python.org/simple/

另外一个索引 chenshaowen/dev,则仅能通过上传来新增包。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
devpi  getjson /chenshaowen
{
    "result": {
        "indexes": {
            "dev": {
                "acl_toxresult_upload": [
                    ":ANONYMOUS:"
                ],
                "acl_upload": [
                    "chenshaowen"
                ],
                "bases": [],
                "mirror_whitelist": [],
                "pypi_whitelist": [],
                "type": "stage",
                "volatile": true
            }
        },
        "username": "chenshaowen"
    },
    "type": "userconfig"
}

常用 devpi-server 服务端操作命令:

1
2
3
4
5
devpi-server --init
devpi-server --start
devpi-server --stop
devpi-server --status
devpi-server --log

3.3 基本 devpi client 操作

devpi 是通过 client 与 devpi server 进行交互配置的。下面是一些基本的交互操作命令:

  • devpi login root –password,登陆,首次启动密码为空
  • devpi user -m root password=123,修改密码
  • devpi logoff,退出登陆
  • devpi user -c myuser password=mypassword email=myemail@example.com,创建新用户
  • devpi login myuser –password=mypassword
  • devpi index -c dev bases=root/pypi 创建索引
  • devpi use chenshaowen/dev,使用索引
  • devpi upload ,上传包,需要在 setup.py 所在目录下执行
  • devpi upload –with-docs,上传包,支持 sphinx 创建的文档,需要 docs 目录和 setup.py 在同个目录下
  • devpi index myuser/dev mirror_url = “https://pypi.doubanio.com/simple/" , 当仓库中不存在包时,从豆瓣下载包缓存到本地(默认是从官方源 https://pypi.python.org/simple/ 下载)
  • devpi push,将包从一个索引推送到另外一个索引

通过 devpi 命令可以新建索引,对索引中的包和权限进行管理,具体操作步骤可以参考官方文档

4. 客户端配置

在服务器上运行 devpi server 之后,还需要通过 Nginx 反向代理对外提供服务。具体配置可以参考官方文档。这里以 Nginx 已经配置了 devpi.example.com 域名为例:

本地新建 ~/.pip/pip.conf 文件,内容如下:

1
2
3
4
5
[global]
timeout = 60
index-url = http://devpi.example.com/root/pypi/+simple/
[install]
trusted-host = devpi.example.com

这样就将 pip 默认的安装源指向了 devpi server。

5. 参考


微信公众号