搭建本地的pip镜像源

1. 创建文件夹:./pypi_mirror_test

2. 创建并进入conda虚拟环境,安装pip2pi包

pip install pip2pi

3. 下载pypi的packages

可以参考其他博客,或者我之前的博客.

偷懒,仅仅测试用的话:

1)在文件夹下创建requirements.txt文本文件,内容如下

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

2)在命令行中,进入pypi_mirror_test目录所在文件夹,执行以下命令, 安装几个pypi数据包

pip install -r ./pypi_mirror_test/requirements.txt

4. 执行dir2pi命令,生成pypi包的html索引

说明:

  • 1)dir2pi函数是pip2pi包中自带的,不需要额外安装。
  • 2)在ubuntu下运行需要加 sudo 命令。
  • 3)在windows下运行,需要“以管理员身份”命令行,否则会报错。

在linux中:

sudo dir2pi ./pypi_mirror_test

在windows中:以管理员身份打开cmd命令行终端,执行

dir2pi ./pypi_mirror_test

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

5. 发布镜像源(暴露资源至网络),使得互联网或局域网可以访问下载package

方式1:用python创建server服务

simple或者在site-packages 里创建server服务,8080为端口号,可以随意设置:

python -m http.server 8080

 此时可以在浏览器中访问并下载自己建立的pypi镜像库

路径1:127.0.0.1:8080

路径2:your_compuer_ip:8080. 其中,your_compuer_ip是你电脑的ipv4的地址,可以通过命令行终端自行查看。

方式2: 用nginx发布

下载安装nginx,修改nginx.conf:(nginx下载地址)

server{
    listen		8080;  # 1.设置端口
    server_name 	127.0.0.1;  # 2.设置网址名
    access_log 	logs/pip.log;
    location / {
            root D:/program/pypi_mirror_test/simple; # 3.设置html文件的搜索路径
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
    }
}

双击执行nginx.exe启动nginx,此时可以用浏览器打开127.0.0.1:8080访问simple文件夹,

但是我这里总是下载文件失败,还没找到原因。

【错误原因】可能是没有配置好nginx对“.symlink”文件的权限。通过修改simple文件夹下的index.html文件可以绕过.symlink文件,直接下载源文件。具体修改方法是:

需要去修改simple目录下每个软件包目录下的index.html文件(此部分修改可自行写个python脚本批处理下):
手动操作示范:

在这里插入图片描述

修改前:
在这里插入图片描述

修改后:
在这里插入图片描述

用python脚本批量修改:

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:\pypi-packages\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)

方式3:pypi-server命令

先安装pypiserver

pip install pypiserver

然后执行下面命令: 

pypi-server -p 9090 -P your_path_to_pypi_dir

命令解析:

        -p:指定端口。不指定的话,pypi-server的默认端口是8080.

        -P:指定package路径。不指定的话,pypi-server的默认路径是“~/packages”

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django之按钮(actions)

开篇就是道歉&#xff0c;哈哈哈哈&#xff0c;托更了好久好久&#xff0c;最近太忙了没啥时间更新&#xff0c;各位看官有催更的阔以给我私信哇&#xff0c;希望各位看官给个三连&#xff01;&#xff01;&#xff01;&#x1f60d;&#x1f60d;&#x1f60d;&#x1f60d; …

操作系统期末复习知识点二计算与应用

1.理解银行家算法判断死锁的定理并能计算相关的参数。 2.能利用LRU、FIFO算法求缺页率。 3.纯页式管理中&#xff0c;求逻辑地址对应的物理地址&#xff0c;页号、页内地址长度&#xff0c;画出逻辑地址的格式&#xff0c;在引入块表时&#xff0c;求出有效访问时间。 4.可变分…

高德地图_公共交通路径规划API,获取两地点之间的驾车里程和时间

import pandas as pd import requests import jsondef get_dis_tm(origin, destination,city,cityd):url https://restapi.amap.com/v3/direction/transit/integrated?key xxx #这里就是需要去高德开放平台去申请key,请在xxxx位置填写,web服务APIlink {}origin{}&desti…

Android studio 使用greenDao根据实体类生成dao类

1.遇到的问题 使用android studio根据实体类生成dao其实也很简单&#xff0c;你只要实现 Parcelable Entity public class ConfigDataModel implements Parcelable {Id(autoincrement true)private Long id null; } 2.使用自带的方法生成 使用build-->make Project生成 …

SpringBoot - Maven 打包合并一个胖 JAR 以及主项目 JAR 依赖 JAR 分离打包解决方案

问题描述 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.18.RELEASE</version><configuration><!--<classifier>exec</classifier>--…

视频号视频怎么保存到手机相册?

在微信视频号中看到喜欢的视频&#xff0c;想要缓存下载到手机&#xff0c;却怎么也找不到办法。很多朋友会选择去录屏&#xff0c;但保存下来的视频实在是不美观&#xff0c;而且费时费力&#xff01;着实没必要&#xff01;下面给大家推荐一款亲测有效的微信视频号视频下载方…

异策略深度强化学习中的经验回放研究综述

源自&#xff1a;自动化学报 作者&#xff1a;胡子剑, 高晓光, 万开方, 张乐天, 汪强龙 “人工智能技术与咨询” 发布 摘 要 作为一种不需要事先获得训练数据的机器学习方法, 强化学习(Reinforcement learning, RL)在智能体与环境的不断交互过程中寻找最优策略, 是解决序贯…

nginx记录配置文件

查询当前域名配置所在的nginx文件路径 1&#xff1a;nginx -t 2&#xff1a;cd /usr/local/nginx/conf (如果没看到conf文件&#xff0c;那就根据不同公司定制的规则&#xff0c;这里是才conf下的vhost/) 3:cat xxx.conf 能看到 包应该要放的位置 4&#xff1a;把包解压到…

C#实现串口通讯

1、官网下载Launch Virtual Serial Port Driver Virtual Serial Port Driver - create and emulate virtual COM port&#xff0c;开个虚拟串口&#xff1a; Pair模式&#xff08;一对&#xff0c;成双成对的意思&#xff0c;就是COM1向COM2传或者COM2向COM1,好比两台机器的CO…

css mask 案例

文章目录 一、基本用法二、图案遮罩二、文字阴影效果三、日历探照灯效果 CSS的mask属性用于定义一个可重复使用的遮罩&#xff0c;可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性&#xff0c;可以创建独特的效果&#xff0c;比如圆形、渐变…

华为云Windows Server服务器下,Node使用pm2-logrotate分割pm2日志,解决pm2日志内存占用过高的问题。

一、简介 PM2 是一个守护进程管理器&#xff0c;它将帮助您管理和保持您的应用程序在线。PM2 入门很简单&#xff0c;它以简单直观的 CLI 形式提供&#xff0c;可通过 NPM 安装。官网地址&#xff1a;https://pm2.keymetrics.io/ 二、问题&#xff1a;pm2日志内存占用过高&am…

uniapp 添加分包页面,配置分包预下载

为什么要分包 ? 分包即将小程序代码分成多个部分打包&#xff0c;可以减少小程序的加载时间&#xff0c;提升用户体验 添加分包页面 比较便捷的方法是使用vscode插件 uni-create-view 新建分包文件夹 以在我的页面&#xff0c;添加分包的设置页面为例&#xff0c;新建文件夹 s…

Nature | 大型语言模型(LLM)能够产生和发现新知识吗?

大型语言模型&#xff08;LLM&#xff09;是基于大量数据进行预训练的超大型深度学习模型。底层转换器是一组神经网络&#xff0c;这些神经网络由具有自注意力功能的编码器和解码器组成。编码器和解码器从一系列文本中提取含义&#xff0c;并理解其中的单词和短语之间的关系。通…

nginx userid到底做了啥?

我们公司在用nginx的userid模块作为简单的用户请求追踪使用。这个模块其实并不能真正记录用户的请求状态&#xff0c;只能作为一个辅助使用。但是在一些场景下会有一些异常。下面我们简单介绍一下这个模块到底做了什么。 userid 模块简介 官网说明文档 ngx_http_userid_modul…

蓝桥杯c/c++程序设计——数位排序

数位排序【第十三届】【省赛】【C组】 题目描述 小蓝对一个数的数位之和很感兴趣&#xff0c;今天他要按照数位之和给数排序。 当两个数各个数位之和不同时&#xff0c;将数位和较小的排在前面&#xff0c;当数位之和相等时&#xff0c;将数值小的排在前面。 例如&#xff0…

CAD objectArx 在操作mfc时出现“不支持尝试执行的操作“

问题原因&#xff1a; ARX中对话框通常继承自CAcUiDialog&#xff0c;CAcUiDialog 构造函数有个参数 HINSTANCE hInstance&#xff0c;默认为 NULL&#xff0c;指定了对话框资源所在DLL进程。如果没有指定该参数&#xff0c;在创建对话框&#xff08;DoModal或Create&#xff…

竞赛保研 基于RSSI的室内wifi定位系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; wifi室内定位系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;…

ip addr和ifconfig

ip addr可以显示更多信息&#xff0c;包括为启动的网络驱动如wlan&#xff0c;而ifocnfig只显示在线的驱动。若wlan是down的&#xff0c;则ip addr会显示信息&#xff0c;ifconfig不会显示信息。 ip addr: ifconfig:

网络通信协议

WebSocket通信 WebSocket是一种基于TCP的网络通信协议&#xff0c;提供了浏览器和服务器之间的全双工通信&#xff08;full-duplex&#xff09;能力。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接可以创建持久性的连接&#xff…

定制TikTok引流脚本必备功能!

在TikTok的海洋中&#xff0c;如何让你的品牌或产品脱颖而出?除了内容创新&#xff0c;一个高效的TikTok引流脚本也是关键&#xff0c;本文将为你揭示定制TikTok引流脚本必备的四大功能&#xff0c;助你在这场流量大战中占得先机。 一、消息多发 在TikTok上&#xff0c;消息…