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

使用缓存机制可以显著减少对外部源的请求量,从而提高下载速度,并降低被源站封禁的风险。下面详细解释如何在本地服务器上设置和使用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 包安装,同时降低对外网的依赖。


 

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值