使用pip2pi和nginx搭建私有pip镜像源方法

在内网环境下部署python开发环境,安装python第三方库比较麻烦,特别是安装需要多个依赖的库。一种比较好的解决方案是搭建一个本地的私有pip镜像源,有多个方案可以选择,比如pypiserver、pip2pi等,本文介绍使用python的pip2pi库,搭配nginx来搭建pip镜像源的方法。

目录

  • 1 搭建环境
  • 2 pip2pi安装
  • 3 python包下载
  • 4 创建索引
  • 5 nginx安装配置
    • 5.1 nginx安装
    • 5.2 nginx配置
  • 6 使用本地镜像源

1 搭建环境

Windows和Linux系统上都可以使用pip2pi来搭建pip镜像源,本文介绍在Linux上的部署方法,Windows系统类似。

使用的Linux发行版本为centos7:

$ uname -a
Linux Server 3.10.0-1160.114.2.el7.x86_64 #1 SMP Wed Mar 20 15:54:52 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

另外需要安装一下python环境,本文使用的python版本为3.10.11,安装编译方法可参考Python环境配置以及包管理方法详细介绍。

2 pip2pi安装

使用pip命令安装:

pip3 install pip2pi

离线环境可先到有网的环境下载whl包:https://pypi.org/project/pip2pi/#files

然后离线安装:

$ pip3 install pip2pi-0.8.2-py2.py3-none-any.whl        

3 python包下载

在本地部署pypi源需要将python库下载到本地然后对其进行索引,因此库文件是很关键的,然而当前pypi官方源有巨量的python库文件,需要大量的空间(几十T)。如果你有足够的磁盘空间可以到pip国内镜像源下载。

实际使用中大多数python库用不上,仅下载团队项目开发所需要的那些库即可。

可使用pip download命令下载所需的包,具体下载方法参考Python环境配置以及包管理方法详细介绍

4 创建索引

将下载的python安装包放到/home/pythonlibs目录下,然后执行如下命令创建索引:

$ dir2pi /home/pythonlibs

执行成功后,/home/pythonlibs目录下会创建一个simple目录,对库文件进行了索引:

├── simple
│   ├── aerich
│   │   ├── aerich-0.7.2-py3-none-any.whl -> ../../aerich-0.7.2-py3-none-any.whl
│   │   └── index.html
│   ├── aiofiles
│   │   ├── aiofiles-0.5.0-py3-none-any.whl -> ../../aiofiles-0.5.0-py3-none-any.whl
│   │   └── index.html
...

比如aerich库的index.html内容为:

<a href='aerich-0.7.2-py3-none-any.whl'>aerich-0.7.2-py3-none-any.whl</a><br />

如果有多个aerich版本的库文件,会在index.html文件中显示。

5 nginx安装配置

如果只是临时使用,也可以直接使用Python内置模块http.server来创建一个简单的web服务,在包文件目录(/home/pythonlibs)执行如下命令即可:

python3 -m http.server 8086

Nginx是一个高性能的HTTP和反向代理web服务器,有很好的并发性能,下面介绍使用Nginx来发布镜像源。

5.1 nginx安装

到官网 https://nginx.org/en/download.html 下载nginx安装包nginx-1.24.0.tar.gz,安装步骤如下:

# 1. 解压
$ tar -xvzf nginx-1.24.0.tar.gz -C /home# 2. 安装
$ cd /home/nginx-1.24.0/
$ ./configure --with-stream
$ make & make install

查看nginx安装路径:

$ whereis nginx
nginx: /usr/local/nginx

5.2 nginx配置

修改配置文件,其中我的Linux服务器IP地址为192.168.20.9:

$ vim /usr/local/nginx/nginx.conf1、设置
user root;2、配置pip源端口号以及路径server {listen      8086;server_name  192.168.20.9:8086;location / {root /home/pythonlibs;autoindex on;charset utf-8;}}

启动:

$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
$ /usr/local/nginx/sbin/nginx -s reload

注意:需要关闭服务器的防火墙,或者开放指定端口号,我这里是80876端口号。

启动成功后可在浏览器访问地址:http://192.168.20.9:8086/simple/

在这里插入图片描述

页面列出了所有索引成功的python库,说明pypi本地源已经搭建成功。

6 使用本地镜像源

本地源部署完成后,可以使用pip命令从搭建的本地源下载安装python库:

$ pip3 install xlwt -i http://192.168.20.9:8086/simple --trusted-host 192.168.20.9
--THE END--

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python求子数组和的所有元素(附Demo)

目录 前言1. 暴力求解2. 前缀和哈希表3. 滑动窗口 前言 工作需要&#xff0c;对应需要优化查找子数组和等于特定值的算法 对应的算法推荐&#xff1a;子数组相关题目 以下算法主要针对Python 1. 暴力求解 双重循环时间复杂度为 O(n2) def subarrays_with_sum_equal_k(num…

HTML的常用标签

HTML&#xff08;补&#xff09; CSS选择器 元素选择器&#xff1a;指定一个标签给这个标签设置一个默认的样式。设置的样式对所有相同的标签都有用。 id选择器&#xff1a;我们可以给标签指定一个唯一的id&#xff0c;然后根据id可以在style标签中设置对应标签的样式元素。设…

【仿真建模-anylogic】FlowchartBlock原理解析

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-17 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 类图 2. 原理解析 2.1 核心函数 函数功能FlowchartBlock(Engine engine ,Agent owner, AgentList population )构造函数&#xff…

Day 24:100301. 构成整天的下标对数目II

Leetcode 100301. 构成整天的下标对数目II 给你一个整数数组 hours&#xff0c;表示以 **小时 **为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 **整天 **的下标对 i, j 的数目。 **整天 **定义为时间持续时间是 24 小时的 *…

助力樱桃智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下樱桃成熟度智能检测识别系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;再到医疗健康&#xff0c;其影响力无处不在。然而&#xff0c;当我们把目光转向中国的农业领域时&#xff0c;一个令人惊讶的…

虾皮平台API:获取商品买家评论数据

一、接口核心功能 在电商领域&#xff0c;买家评论对于商品的销售和商家的口碑至关重要。虾皮作为东南亚地区知名的电商平台&#xff0c;为商家提供了丰富的商品买家评论数据。为了方便商家获取这些数据&#xff0c;我们的API接口服务其核心功能就是获取商品买家评论数据信息。…

docker和docker compose 部署

一. 将微服务运行在docker上&#xff1a; 1.新建一个空文件夹docker-demo&#xff0c;在里面再新建文件夹app&#xff0c;在app目录下新建一个名为Dockerfile的文件。 2.编写Dockerfile文件 3.构建镜像 4.启动镜像 5.可以访问了。 二使用Dockerfile构建微服务镜像 1.将j…

Python | Leetcode Python题解之第160题相交链表

题目&#xff1a; 题解&#xff1a; class Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:A, B headA, headBwhile A ! B:A A.next if A else headBB B.next if B else headAreturn A

gt9x双击唤醒屏幕

里面可以看到irq 和 rst的gpio引脚从设备树获取失败&#xff0c;排查设备树发现是属性名写错了&#xff1a; c &i2c1 {status "okay";goodix_ts5d {compatible "goodix,gt9xx";reg <0x5d>;// tp-size <89>;touchscreen-size-x <12…

6.1触发器的创建、删除和使用

6.1.1 触发器概述 触发器是一个被指定关联到表的数据库对象&#xff0c;与表的关系密切&#xff0c;不需要用户调用&#xff0c;在一个表的特定事件出现时将会被激活&#xff0c;此时某些MySql语句会自动执行。 触发器用于实现数据库的完整性&#xff0c;具有以下特点&#xff…

深入了解RSA加密算法

目录 前言 一、什么是RSA&#xff1f; 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代&#xff0c;信息的安全性成为了人们关注…

密码学-密码协议之零知识证明

一、前言 零知识证明实际上一种密码协议&#xff0c;该协议的一方称为证明者(Prover)&#xff0c;通常用P表示&#xff0c;协议的另一方是验证者(Verifier)&#xff0c;一般用V表示。零知识证明是指P试图使V相信某个论断是正确的&#xff0c;但却不向V提供任何有用的信息&…

Photoshop中图像美化工具的应用

Photoshop中图像美化工具的应用 Photoshop中的裁剪工具Photoshop中的修饰工具模糊工具锐化工具涂抹工具 Photoshop中的颜色调整工具减淡工具加深工具海绵工具 Photoshop中的修复工具仿制图章工具污点修复画笔工具修复画笔工具修补工具内容感知移动工具红眼工具 Photoshop中的裁…

尚品汇-(二)

一&#xff1a;环境安装 1.安装JAVA 运行环境 第一步&#xff1a;上传或下载安装包 cd /usr/local jdk-8u152-linux-x64.tar.gz 第二步&#xff1a;解压安装包 tar -zxvf jdk-8u152-linux-x64.tar.gz 第三步&#xff1a;建立软连接&#xff08;快捷方式&#xff09; ln -…

SpringBoot配置第三方专业缓存技术Redis

Redis缓存技术 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存中数据结构存储系统&#xff0c;通常用作数据库、缓存和消息中间件。它支持多种数据结构&#xff0c;如字符串、哈希表、列表、集合、有序集合等&#xff0c;并提供了丰富的功能和灵活的…

4.1 初探Spring Boot

初探Spring Boot实战概述 Spring Boot简介 Spring Boot是一个开源的Java框架&#xff0c;由Pivotal团队&#xff08;现为VMware的一部分&#xff09;开发&#xff0c;旨在简化Spring应用程序的创建和部署过程。它通过提供一系列自动化配置、独立运行的特性和微服务支持&#…

HTML和CSS基础(一)

前言 HTML&#xff08;HyperText Markup Language&#xff09;是一种用于创建网页的标准标记语言。它由各种标签组成&#xff0c;这些标签定义了网页的结构和内容。HTML的早期形式诞生于1989年&#xff0c;由CERN的物理学家Tim Berners-Lee发明&#xff0c;最初用于在科学家之…

C语言 | Leetcode C语言题解之第160题相交链表

题目&#xff1a; 题解&#xff1a; struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {if (headA NULL || headB NULL) {return NULL;}struct ListNode *pA headA, *pB headB;while (pA ! pB) {pA pA NULL ? headB : pA->ne…

windows11 x64 23H2 企业纯净版2024.6.16

闲来无事试安装了下da_nao_yan的 【6月12日更新】Windows11 22631.3737企业版 23H2 自用优化版 &#xff08;原版地址&#xff1a;https://bbs.pcbeta.com/viewthread-1985546-1-1.html&#xff09;&#xff0c;感觉比原版流畅多了&#xff0c;重新按照自己习惯封装了下&#x…

排序——希尔排序

希尔排序实际上是插入排序的优化&#xff0c;所以要先介绍插入排序。 目录 插入排序 思想 演示 代码实现 总结 希尔排序 思想 演示 代码 总结 插入排序 思想 又称直接插入排序。它的基本思想是将一个值插入到一个有序序列中。直至将所有的值都插入完。 演示 假设数…