首页 > 其他分享 >使用devpi-server搭建pypi本地缓存服务器

使用devpi-server搭建pypi本地缓存服务器

时间:2024-08-30 16:56:42浏览次数:13  
标签:缓存 devpi pypi server pip 服务器 pypiserver

使用缓存机制可以显著减少对外部源的请求量,从而提高下载速度,并降低被源站封禁的风险。下面详细解释如何在本地服务器上设置和使用pip缓存机制。

缓存机制的基本原理

缓存机制的原理是在本地服务器上保存已经下载过的Python包,当其他服务器请求同样的包时,本地服务器可以直接提供,而无需再次从外部源下载。常见的缓存实现方式包括使用`devpi`或`pypiserver`等工具。

1. **使用`devpi`作为本地PyPI缓存**

`devpi`是一款功能强大的Python包管理工具,支持本地缓存、私有仓库和简单的包索引等功能。

 **安装`devpi`**

在您的本地服务器上安装`devpi`:

```bash
sudo apt update
sudo apt install python3-pip
sudo pip3 install devpi-server devpi-web
```

#### **初始化`devpi`服务**

初始化`devpi-server`并启动:

```bash
devpi-server --start --host 0.0.0.0 --port 3141
```

第一次运行`devpi-server`时,它会在当前目录创建一个数据库。可以通过指定`--serverdir`参数来定义数据库存储的位置:

```bash
devpi-server --start --serverdir /srv/devpi --host 0.0.0.0 --port 3141
```

 **设置`devpi`为镜像缓存**

`devpi`默认会从PyPI获取包,并在本地缓存。您可以指定镜像源,例如使用清华的源作为上游:

```bash
devpi use http://pypi.tuna.tsinghua.edu.cn/simple/
```

启动`devpi`后,本地的其他服务器可以通过`devpi`的地址获取包。

 **配置客户端使用缓存**

在其他服务器上配置`pip`使用`devpi`:

```bash
mkdir -p ~/.pip
nano ~/.pip/pip.conf
```

添加以下内容:

```ini
[global]
index-url = http://<your-devpi-server-ip>:3141/root/pypi/+simple/
```

当这些服务器使用`pip install`时,如果本地`devpi`服务器缓存了所需的包,它们将直接从缓存中获取,而不需要访问外部源。

 2. **使用`pypiserver`作为本地PyPI缓存**

`pypiserver`是一个轻量级的Python包索引服务器,适合用于简单的包缓存和私有包管理。

 **安装`pypiserver`**

在本地服务器上安装`pypiserver`:

```bash
sudo pip install pypiserver
```

 **配置`pypiserver`**

`pypiserver`默认不会缓存PyPI上的包,而是作为一个简单的包索引服务器使用。如果需要实现缓存功能,可以使用`bandersnatch`、`devpi`等工具同步外部源,然后将这些包存储到`pypiserver`的包目录中。

启动`pypiserver`,并指定包存储目录(例如`/srv/pypi`):

```bash
pypiserver -p 8080 /srv/pypi
```

#### **使用`pypiserver`提供缓存服务**

在其他服务器上配置`pip`使用`pypiserver`:

```ini
[global]
index-url = http://<your-pypiserver-ip>:8080/simple/
```

每次安装包时,`pip`首先会从`pypiserver`获取包,如果没有找到,您可以配置`pypiserver`使用外部镜像源作为备份。

 3. **配置多级缓存**

您可以配置多级缓存,即首先尝试从本地的`devpi`或`pypiserver`获取包,如果没有,再从外部源下载并缓存到本地。`devpi`已经支持这种机制,而`pypiserver`可以通过在`nginx`等反向代理中实现类似功能。

使用本地缓存机制,可以有效减少外部请求,提升安装速度,并降低被外部源封禁的风险。`devpi`提供了丰富的功能,适合大型环境,而`pypiserver`则更为轻量,适合小型或简单的需求。通过合理配置缓存机制,您可以大幅提升局域网内Python包管理的效率

 详细配置步骤

1. 准备服务器环境

首先,在局域网中选择一台作为缓存服务器的机器,并确保已经安装了 Python 和 `pip`。

```bash
sudo apt update
sudo apt install python3 python3-pip -y
```

2. 安装 `devpi-server` 和 `devpi-web`

在缓存服务器上,安装 `devpi-server` 和 `devpi-web`。这些工具将帮助您构建和管理本地的 Python 包缓存服务器。

```bash
sudo pip3 install devpi-server devpi-web
```

3. 初始化 `devpi-server`

在 `/huachen/devpi/` 目录下初始化 `devpi-server`。这个目录将用于存储缓存的 Python 包。

```bash
mkdir -p /huachen/devpi
devpi-server --serverdir /huachen/devpi --init
```

#### 4. 启动 `devpi-server`

启动 `devpi-server`,使其在指定的 IP 地址和端口上运行。您可以通过以下命令在后台启动服务:

```bash
devpi-server --serverdir /huachen/devpi --host 0.0.0.0 --port 3141 --secretfile /huachen/devpi/secret &
```

5. 设置上游镜像源

为 `devpi` 设置上游的国内镜像源,例如清华大学的镜像源。这将使 `devpi` 从这个镜像源获取并缓存包。

```bash
devpi use http://localhost:3141/root/pypi
devpi login root --password=''
devpi index root/pypi mirror_url=https://pypi.tuna.tsinghua.edu.cn/simple/
```

6. 配置客户端服务器

在局域网内的其他 Ubuntu 服务器上配置 `pip`,使其从本地的 `devpi` 服务器获取 Python 包。

编辑或创建 `~/.pip/pip.conf` 文件,并添加以下内容:

```bash
[global]
index-url = http://<devpi-server-ip>:3141/root/pypi/+simple/
trusted-host = <devpi-server-ip>
```

将 `<devpi-server-ip>` 替换为您的 `devpi` 服务器的 IP 地址。

7. 验证配置

在客户端服务器上,尝试安装一个 Python 包,验证是否通过本地的 `devpi` 服务器下载:

```bash
pip install requests
```

在首次安装时,`devpi-server` 将从上游镜像源获取包并缓存。之后的安装请求将直接从本地缓存中提供包。

 总结

- `devpi-server` 充当本地缓存服务器,存储和提供 Python 包。
- 使用上游国内镜像源,确保包的下载速度。
- 配置局域网内的其他服务器通过 `pip` 使用本地缓存服务器,减少外部下载次数。

通过这种方式,您可以有效地加速局域网内的 Python 包安装,同时降低对外网的依赖。


 

标签:缓存,devpi,pypi,server,pip,服务器,pypiserver
From: https://blog.csdn.net/NTD_huachen/article/details/141721544

相关文章

  • SQL server 数据文件物理层面迁移
    背景当前有一套SQLserver数据库(Primary+Mirror)主备环境数据盘大小不一致,且灾备环境无法对磁盘进行扩容,需要对灾备环境进行整体数据文件迁移,满足当前数据库运行。停止数据库mirro同步select'use[master]ALTERDATABASE['+db_name(database_id)+']SETPARTNERSUSPEND'froms......
  • SQL Server视图定义中不能使用option(recompile)提示
    SQLSever数据库中,我们一般使用OPTION(RECOMPILE)查询提示(QueryHints)来解决SQL语句或存储过程的参数嗅探问题或某些SQL性能问题,它强制优化器重新编译查询语句,生成新的执行计划。最近在帮同事优化一个复杂视图时,发现这个视图的执行计划一直在变化,有时候生成的一个糟糕执行计划,导......
  • 堡垒机jumpserver搭建
    1.检查防火墙是否关闭#安装jumpserver版本为v4.1#未关闭的话执行systemctlstopfirewalld[root@kylin-10-sp3~]#systemctlstatusfirewalld●firewalld.service-firewalld-dynamicfirewalldaemonLoaded:loaded(/usr/lib/systemd/system/firewalld.servic......
  • sql-server
    数据库常用对象表包含数据库中所有数据的对象,行和列组成,用于组织和存储数据。字段表中的列一个表可以有多个列,自己的属性:数据类型(决定了该字段存储哪种类型的数据),大小(长度)。视图表(虚拟表)一张或多张表用户查看数据的一种方式,结构和数据是建立在对表的查询基础之上的。......
  • SQL Server 链接服务器(Linked Servers)
    通过T-SQL语句来添加、删除或修改链接服务器配置进行跨数据库、跨实例或甚至跨数据库系统的数据集成和查询 SELECT*FROMsysservers可以查出当前SQLServer实例上配置的所有链接服务器的列表及其相关信息 sp_addlinkedserver[@server=]N'server'[......
  • IntersectionObserver实现监听dom进入浏览器视口
    letimg=document.getElementsByTagName("img");constobserver=newIntersectionObserver(entries=>{//entries是被观察的元素集合for(leti=0,len=entries.length;i<len;i++){letentries=entries[i];//通过这个属性判断是否在视口......
  • SQLserver中的事务以及数据并发的问题和事务的四种隔离级别
    SQLserver中的事务在SQLServer中,事务是一组原子性的SQL语句集合,要么全部成功执行,要么全部不执行。事务确保数据库的完整性和一致性,即使在发生错误或系统故障的情况下也是如此。SQLServer支持本地事务和分布式事务。事务的特性(ACID属性)原子性(Atomicity):事务中的所有......
  • CAS server如何自定义Controller控制器
    CASserver如何自定义Controller控制器在实际开发过程中,CASServer4.0.0服务端提供了登录、认证等功能,但是我们希望加入更多的自定义功能,如自定义第三方登录服务等功能。增加一个Controller类控制器以及修改部分配置来完成CASServer4.0.0自定义Controller扩展,废话就不多说了,......
  • sqlserver调优的相关查询
    SQLServer系统卡顿可能由多种原因引起,如硬件资源不足、查询性能问题、锁争用、并发连接过多等。以下是一些排查和优化步骤:1.检查硬件资源CPU使用率:检查SQLServer的CPU使用情况,特别是是否有单个查询占用了过多的CPU资源。使用TaskManager或PerformanceMonitor查......
  • SQL server 特殊字符"\u0000"处理
    某天,接到用户反馈点击某个项目分组的时候页面报错,点击其他项目不报错。初步以为是下标数字特殊符号导致的。通过前台输出对应的数值后发现该字段末尾有个“\u0000”特殊字符(ASCII字符char(0))。通常是导入数据时的格式问题或是程序处理时将页面中的换行字符保存数据库导致的。......