从零搭建本地pypi镜像源1:快速体验

news2024/11/26 16:55:39

前言:

许多公司,出于数据安全与知识产权的原因,在公司内部搭建局域网进行算法开发。配置一个本地的pypi镜像源对工程开发十分重要。搭建本地pypi镜像源的工具有多种,本文主要介绍pip2pi方法。

第一步:新建项目,创建环境,安装项目依赖包

项目依赖包列表mirror-project-env-requirements.txt为:

beautifulsoup4==4.11.1
bs4==0.0.1
certifi 
charset-normalizer==2.1.1
idna==3.4
lxml==4.9.1
numpy==1.21.6
pandas==1.3.5
pip2pi==0.8.2
python-dateutil==2.8.2
pytz==2022.6
requests==2.28.1
six==1.16.0
soupsieve==2.3.2.post1
urllib3==1.26.13
wincertstore==0.2

创建环境,在线安装依赖包 

# 创建环境
conda create -n build_pypi_mirror_env python=3.7

# 激活环境
conda activate build_pypi_mirror_env

# 安装依赖包
pip install -r mirror-project-env-requirements.txt

第二步:下载pypi包到本地

        为了快速体验,本文下载当前项目环境中的依赖包。

# 创建文件夹
mkdir D:/PypiPackages 

# 把pypi包下载到文件夹
pip download -d D:/PypiPackages -r requirements.txt 

第三步:生成pypi包的html索引

dir2pi D:/PypiPackages

如果在win10系统中运行,过程中会报出下面错误,忽略即可,不影响后续过程。

(pypi-build-env) C:\Users\wzg16>dir2pi D:\PypiPackages
ERROR linking ../../beautifulsoup4-4.11.1-py3-none-any.whl to D:\PypiPackages\simple\beautifulsoup4\beautifulsoup4-4.11.1-py3-none-any.whl (skipping): symbolic link privilege not held
ERROR linking ../../bs4-0.0.1.tar.gz to D:\PypiPackages\simple\bs4\bs4-0.0.1.tar.gz (skipping): symbolic link privilege not held
ERROR linking ../../certifi-2022.12.7-py3-none-any.whl to D:\PypiPackages\simple\certifi\certifi-2022.12.7-py3-none-any.whl (skipping): symbolic link privilege not held
ERROR linking ../../charset_normalizer-2.1.1-py3-none-any.whl to D:\PypiPackages\simple\charset-normalizer\charset_normalizer-2.1.1-py3-none-any.whl (skipping): symbolic link privilege not held
ERROR linking ../../idna-3.4-py3-none-any.whl to D:\PypiPackages\simple\idna\idna-3.4-py3-none-any.whl (skipping): symbolic link privilege not held

执行完毕后,会在D:/PypiPackages文件夹下生成一个simple文件夹,存储着python包的html索引。 

 simple文件夹的内容如下:

 第四步:校正index.html的索引格式。

        如果是在win10系统中执行的该项目,pip2pi得到的index.html不能直接使用,需要做以下修改(在linux系统中,应该不需要此步骤,暂时还没试):

修改前:

 修改后:

主要的修改内容是:在路径上添加了“../../”。

可以手动修改,也可以写一个pyghon脚本批量执行,下面是我写的批量修改的脚本。

import os 
import glob
 
 
class Class_Util_Text():
    def __init__(self):
        pass
 
    def read_text(self,text_path):
        """
        读取本地text文件到列表,并返回该列表
        """
        assert os.path.exists(text_path)
        with open(text_path,"r") as f:
            lines=f.readlines() #读行
        return lines
 
    def write_text(self,text_path,text_content):
        """
        把文字写入文本文件中,会清空文本文件的原有内容
        """
        with open(text_path,"w") as f:
            f.writelines(text_content)
            f.writelines("\n")
 
    def append_text(self,text_path,text_content):
        """
        把文字添加到文本文件的末尾,保留原文本文件内容
        """
        with open(text_path,"a") as f:
            f.writelines(text_content)
            f.writelines("\n")
 
    def replace_text(self,text_path,replace_old,replace_new):
        """
        替换文本文件中的部分文字,先读文件,替换文字后,再重新写入文件
        """
        #read
        with open(text_path,"r") as f:
            lines=f.readlines() 
            data=[]  
            for i in lines:
                #根据条件修改
                if(replace_old in i):
                    i=i.replace(replace_old,replace_new)   #修改 replace_old 为 replace_new
                data.append(i)     #记录每一行      
        #write
        with open(text_path,"w") as f:
            for i in data:
                f.writelines(i)
 
 
 
if __name__ =="__main__":
    txt_obj = Class_Util_Text()
    dir_path = "D:\PypiPackages\simple"
    html_files = glob.glob(dir_path+"/*/index.html")
 
    for html_path in html_files:
        txt_obj.replace_text(html_path,replace_old="<a href='",replace_new="<a href='../../" )
        # txt_obj.replace_text(html_path,replace_old="<a href='../../",replace_new="<a href='" )
        lines = txt_obj.read_text(html_path)
        print(html_path)
        print(lines)

 第五步:安装nginx,修改nginx.conf

        nginx的下载地址是:https://nginx.org/download/nginx-1.16.1.zip

        找到并打开nginx.conf文件,进行以下修改。

server{
    listen		8080;
    server_name 	127.0.0.1:8080;
    access_log 	logs/pip.log;
    location / {
            root D:\PypiPackages;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
    }
}

        这个步骤的目的/功能是:把文件夹路径与IP地址(127.0.0.1:8080)进行关联。当在浏览器中输入127.0.0.1:8080时,浏览器会定位到D:\PypiPackages文件夹,并搜寻所有的.html文件,在浏览器中显示.html的内容。

第六步:双击nginx.exe,激活nginx。

此时,文件夹路径与IP地址关联成功,通过访问127.0.0.1:8080/smple可以看到D:\PypiPackages文件夹下的pypi包链接,点击链接即可下载package.

注意事项:如果多次更改配置,多次运行nginx.exe,务必保证现在“任务管理器”中结束正在运行的nginx程序,然后重新执行,否则可能修改配置无效。

第七步:配置pip的channel设置,使用自己搭建的本地镜像库安装python相关软件包

 永久性:

pip config set global.index-url http://127.0.0.1:8080/simple/# 配置channel

pip install bs4  # 安装bs4

临时性: 

pip install bs4 -i http://127.0.0.1:8080/simple/
注意:配置channel时,要在网址后面带上“/simple/”

 

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

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

相关文章

间接采购品类多,机械制造企业如何破局制胜优化间采管理?

受贸易政策和能源结构转型等宏观因素的叠加影响&#xff0c;当前机械制造业的市场环境正在迅速变化。过去几十年来&#xff0c;全球经济的有利形势迅速逆转&#xff0c;复杂的国际形势也影响了区域乃至全球贸易平衡。在国内&#xff0c;疫情频发、产业升级、能源转型、“双碳”…

10个提高生产力的 Linux 命令与技巧,用完直接起飞

文章目录一、前言二、使用tab键进行补全2.1 使用Tab键补全命令2.2 使用Tab键补全路径2.3 使用Tab键补全参数三、切换回上一个工作目录四、返回用户主目录五、搜索您使用过的命令六、移至行首或行尾七、快速删除八、使用 less读取文件九、格式化输出结语一、前言 在本文中&…

多数据源解决分布式事务

环境&#xff1a;ideaspringboot2.x 场景&#xff1a;调用addUser方法执行对两个数据库的表操作&#xff0c;如果方法出现异常就回滚 user数据库中的users表 order数据库中的order_number表 将各自的事务管理器改为统一事务管理器即可 第一步pom文件配置jta atomikos 依赖 &l…

Acwing-872. 最大公约数

d | a, a | b > d | ax by (a, b) &#xff08;b, a mod b&#xff09; 证明&#xff1a;a mod b a - [a / b] * b a - c * b 注&#xff1a;[ ] 为下取整符号&#xff0c;[a / b] 记为c 所以&#xff0c;(a, b) &#xff08;b, a - c * b&#xff09; &#xf…

FFmpeg基础到工程-多路H265监控录放开发学习笔记

多路H265监控录放开发学习笔记 课程涉及&#xff1a;FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括&#xff1a;音视频、流媒体、直播、Android、视频监控28181、等。 具体内容包括&#xff1a; 一、视频监控的架构和流程 二、FFmpeg4.3SDL2Qt5开发环境的搭建 三、FFmpeg的…

Chomsky文法

一、实验原理 了解0123型文法的定义并会判断各个文法&#xff0c;会编写并利用程序进行0123型文法的判断 二、实验目的 由于不同文法的判断归根结底是对产生式中不同终结符和非终结符个数的判断&#xff0c;所以在程序中先放置三个字符串集合用以存储终结符、非终结符、产生…

git clone info/refs not valid: is this a git repository问题解决

项目场景&#xff1a; 在我们使用gitlab克隆代码时候&#xff0c;发现无法克隆&#xff0c;遇到如下问题 $ git clone http://192.168.2.x/product/demo.git Cloning into zhlx-web-bpmn... fatal: http://192.168.2.x/product/demo.git/info/refs not valid: is this a gi…

几张图片生成3D模型?距离真正的AI建模还有多远?

时间溯回&#xff0c;早在2017年&#xff0c;美图秀秀就曾引入人工智能美化人像而被谷歌誉为“最佳娱乐App”。智能技术奔腾发展&#xff0c;今年的AIGC技术可谓在各行各业大放异彩&#xff0c;从AI绘画、AI写作到AI配音&#xff0c;人工智能技术自动生成内容已经成为继UGC、PG…

Go C编程 第1课 神奇的魔笔

慧通教育 慧通教育 1.画长方形&#xff08;GoC测试题样例&#xff09; 难度&#xff1a;1 登录 26.画7字(魔法学院第3课) 难度&#xff1a;1 登录 27.画2字(魔法学院第3课) 难度&#xff1a;1 登录 28.画十字(魔法学院第3课) 难度&#xff1a;1 登录 29.画旗帜(魔法学院第…

linux系统使用rsync做主备服务器文件同步

根据本文档设置&#xff0c;可以实现备机自动同步主机中的文件。 &#xff08;注意&#xff0c;此方式缺陷为&#xff1a;如果主机文件修改&#xff0c;但是文件大小无变化或者文件变小时&#xff0c;无法自动同步到备机中&#xff0c;只有主机中文件修改后变大或者名称修改才能…

DP学生最喜欢/讨厌选学的IB课程是什么?

我们看看IBDP在读生们对于IBDP各学科的主观看法供正在选课的准IB学生们参考&#xff01;&#xff08;以下以第一人称方式&#xff0c;信息汇总于IB论坛&#xff0c;仅汇总部分科目&#xff0c;主观性强&#xff0c;仅供参考&#xff09;DP学生最喜欢的IB课程 ● 数学 AA HL 被数…

Java基于springboot+vue+elementUI企业制度管理系统

本企业制度管理系统是针对目前企业制度管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的企业制度管理系统存在的问题进行分析&#xff0c;完善用户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准确率…

如何从音频中提取伴奏?这篇文章告诉你如何提取伴奏

有没有小伙伴在制作视频后期的时候为配乐而烦恼过呢&#xff1f;我就有&#xff0c;之前想为一个视频配上音乐&#xff0c;就直接将歌曲导入视频里面&#xff0c;但出来的效果很是杂乱&#xff0c;导致视频的声音听起来非常嘈杂&#xff0c;影响到了听感和观感&#xff0c;但是…

.NET MAUI Community Toolkit 中的新增功能

对于 .NET MAUI Community Toolkit 来说&#xff0c;11月是一个繁忙的时期&#xff0c;它发布了多个版本&#xff0c;其中包含大量令人惊叹的新功能。最新版本具有新的视图、布局、Tizen 支持、.NET 7 支持等等。这篇文章带你快速了解所有新功能。 什么是 .NET Community Toolk…

Spring Security学习笔记

目录 1、简介 2、初步使用 3、简单实现自定义登录页面用户名和密码 1、简介 Spring Security是一个安全管理框架&#xff0c;主要功能是认证和授权&#xff0c;大中型项目用的比较多&#xff0c;小项目Shiro用的比较多&#xff0c;但是Spring Security比Shiro功能更强大&am…

Appium基础 — APPium基础操作API

目录 1、前置代码 2、安装和卸载APP 3、判断APP是否已安装 4、关闭app软件和关闭驱动对象 5、发送文件到手机和获取手机中的文件 6、获取当前屏幕内元素结构&#xff08;重点&#xff09; 7、脚本内启动其他app 8、将应用程序置于后台运行&#xff08;重点&#xff09;…

小雉系统4.0

项目地址 官网 飞天雉&&小雉视频系统 github https://github.com/feitianzhi/xiaozhios gitee xiaozhios: “小雉系统”并非是开发操作系统,而是一套服务于软件供应商的产品升级方案; QQ交流群&#xff1a;869598376 小雉系统简介 “小雉系统”并非是开发操作系统,而…

SpringCloud项目实例--服务通讯基础API方法

Spring Cloud Alibaba提供的组件如下&#xff1a; Sentinel&#xff1a;阿里巴巴开源产品&#xff0c;不仅仅可以作为断路器&#xff0c;也支持流量控制和服务降级。 Nacos&#xff1a;阿里巴巴开源产品&#xff0c;服务注册与服务发现&#xff0c;同时也可以作为配置中心。 R…

21 【styled-components的使用】

21 【styled-components的使用】 1.为什么要用这个 我们都知道&#xff0c;我们从最开始学css的时候&#xff0c;为了避免写的样式影响到另外的地方。所以我们这样来写的。 #userConten .userBtn button{font-size: 18px; }首先给一个元素写了一个唯一id | class&#xff0c…

自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件(最完整的)

今天笔者就要归纳总结下一整套测试流程&#xff0c;从无到有&#xff0c;实现零突破&#xff0c;包括如何编写测试用例&#xff0c;定时执行测试用例&#xff0c;查找最新生成的测试报告文件&#xff0c;自动发送最新测试报告邮件&#xff0c;一整套完整的测试流程。以后各位只…