从零搭建本地pypi镜像源2:下载清华pypi镜像源

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

        在博客从零搭建本地pypi镜像源1:快速体验_wzg2016的博客-优快云博客中,快速体验了pypi镜像源的搭建过程。本博客在前一个博客的基础之上,着重介绍如何下载整个清华pypi镜像源。

1. 轮子函数--爬虫函数

        我写了几个小函数,从清华pypi镜像源中下载所有的pypi 包。

  util_spider.py

import requests
import re
from bs4 import BeautifulSoup
import pandas as pd
import csv 
import os

class Class_Util_Spider():
    def __init__(self):
        pass

    # 获取子链接
    def get_child_links(self,base_url):
        """
        功能:获取url界面上的所有子链接
        输入:
            url:网址
        输出:
            folder_links:列表,每个元素是一个子url地址
        """
        child_links = []
        # 获取网页源码
        html_text = requests.request("GET",base_url).text
        _links_ = re.findall('<a href="(.*?)/">',html_text)
        for _link_ in _links_:
            link = base_url + "/" + _link_
            child_links.append(link)
        return child_links

    # 获取孙链接
    def get_grandson_links_names(self,url_path_list,text_path):
        """
        功能:解析url界面,获取python包的名称与下载路径
        参数:
            url_path_list:列表,每个元素是一个网页地址,对应于清华镜像的一个python包文件夹
            text_path:txt文件的路径,用于存储python包的名字和下载路径,以逗号分隔

        输出:
            text 文件,每行包含两个元素[name,link],
                -name:python包的名字
                -link:python包的完全下载路径
        """
        file = open(text_path,"w")
        for i,url_path in enumerate(url_path_list):
            print(f"{i}/{len(url_path_list)}",url_path)
            html_text = requests.request("GET",url=url_path).text # 源码解析
            package_links = re.findall('<a href="../../(.*?)"',html_text)# 找到链接
            package_names = re.findall('>(.*?)</a>',html_text) # 找到文件名

            # 将链接和文件名写入csv文件
            for link,name in zip(package_links,package_names):
                link = "https://pypi.tuna.tsinghua.edu.cn/" + link # 链接拼接完整
                file.write(str(name +",,,"+link+"\n"))# 写入
        file.close()

    # 从txt读取文件,转为列表,列表中的每个元素是一个元素对。
    def read_txt_2_list(self,txt_path):
        assert os.path.exists(txt_path)
        txt_file = open(txt_path,"r")
        data_list = []
        for data in txt_file.readlines():
            data = data.strip("\n")
            data_list.append(data)
        txt_file.close()

        return data_list

    # 下载文件
    def download_file(self,save_dir,save_name,download_address,save_dir_his):
        assert os.path.exists(save_dir)

        save_path = os.path.join(save_dir,save_name)
        save_path_old = os.path.join(save_dir_his,save_name)
        if ((not os.path.exists(save_path)) and (not os.path.exists(save_path_old))):
            save_content = requests.get(download_address).content
            with open(save_path,"wb") as f:
                f.write(save_content)
            print(f"Success downloaded {save_name}")
        else:
            print(f"{save_name} Existed!")

2. 轮子函数--文件夹处理函数

  util_folder.py

import os
import shutil
import glob
import numpy as np

class Class_Util_Folder():
    def __init__(self):
        pass

    def get_all_folders(self,base_dir):
        """获取基文件夹下的所有子文件夹"""
        folder_list = []
        for root,dir_names,file_names in os.walk(base_dir):
            for dir_name in dir_names:
                dir_path = os.path.join(root,dir_name)
                folder_list.append(dir_path)
        return folder_list

    def get_all_files(self,base_dir):
        """获取基文件夹下的所有子文件"""
        file_list = []
        for root,dir_names,file_names in os.walk(base_dir):
            for file_name in file_names:
                file_path = os.path.join(root,file_name)
                file_list.append(file_path)
        return file_list

    def remove_empty_folder(self,folder_path):
        """删除空文件夹"""
        if len(os.listdir(folder_path)) == 0:
            os.rmdir(folder_path)

    def get_file_lists(self,fold_path):
        """
        获取folder_path文件夹下的所有文件及文件名。
        """
        file_path_list = np.sort(glob.glob(fold_path+"/*"))# 获取文件夹下的所有文件
        file_name_list = [os.path.split(file)[-1] for file in file_path_list]#路径分割,获取文件名

        file_path_list = [str(file) for file in file_path_list] # 把文件路径转为string格式
        file_name_list = [str(file) for file in file_name_list] # 把文件名转为string格式
        
        return file_path_list,file_name_list
    
    def get_file_name_list(self,folder_path,txt_path):
        """获取一个文件夹下的所有文件的文件名,并写入text文件中"""
        file_path_list,file_name_list = self.get_file_lists(folder_path)
        self.write_list_2_txt(file_name_list,txt_path)

    def write_list_2_txt(self,data_list,txt_path):
        """把列表中的文本数据写入txt文件中"""
        assert len(data_list)>0
        txt_file = open(txt_path,"w")
        for data in data_list:
            assert isinstance(data,str)
            txt_file.write(str(data+"\n"))
        txt_file.close()

    def read_txt_2_list(self,txt_path):
        """从txt文件中读取文本,为列表"""
        assert os.path.exists(txt_path)
        txt_file = open(txt_path,"r")
        data_list = []
        for data in txt_file.readlines():
            data = data.strip("\n")
            data_list.append(data)
        txt_file.close()

        return data_list

    def move_file(self,src_file,aim_file):
        """移动文件:从src_file移动到aim_file"""
        assert (os.path.exists(src_file))
        assert (src_file.split("/")[-1] == aim_file.split("/")[-1])
        if not os.path.exists(aim_file):
            shutil.move(src_file,aim_file)
        else:
            os.remove(src_file)

    def get_files_from_grandpa_fold(self,base_dir):
        """ 获取所有孙文件夹中的文件 """
        path_list = glob.glob(base_dir+"/*/*") 

        file_path_list,file_name_list = [],[]
        for path in path_list:
            if os.path.isfile(path):
                file_path_list.append(path)
                file_name_list.append(os.path.split(path)[-1])

        return file_path_list,file_name_list

    def print_progress(self,current_num,total_num):
        """        打印当前进度        """
        print(f"{round(current_num/total_num*100,2)}%,{current_num}//{total_num}")

3. 步骤一:获取所有pypi包的下载链接

  step1_get_requirements.py

import os 
import requests
import re
from bs4 import BeautifulSoup
import pandas as pd
from util.util_spider import Class_Util_Spider

util_spider_obj = Class_Util_Spider()

search_url_base = "https://pypi.tuna.tsinghua.edu.cn/simple"

# 获取requirements.txt
requirements_txt = "./pypi_requirements_all.txt"
if not os.path.exists(requirements_txt):
    # 获取子链接
    child_links = util_spider_obj.get_child_links(search_url_base) 
    # 通过子链接获取孙链接(pypi包的下载链接),写入requirements_txt中
    util_spider_obj.get_grandson_links_names(child_links,requirements_txt)

4. 步骤二:下载pypi包到本地(截至2022-12-12,约需要12T的存储空间)

  step2_download.py 在linux中使用

from bs4 import BeautifulSoup
import pandas as pd
import numpy as np

from util.util_folder import Class_Util_Folder
from util.util_spider import Class_Util_Spider

util_folder_obj = Class_Util_Folder()
util_spider_obj = Class_Util_Spider()

download_dir_base = "/home/wzg/data2/pypi-packages/"
# # 读取requirements.txt,下载package
error_txt = open("./errors.txt","w") # 用于存储下载失败的package信息
requirements_txt = "./pypi_requirements_all.txt"
required_packages = util_folder_obj.read_txt_2_list(requirements_txt)

for i,package_info in enumerate(required_packages):
    util_folder_obj.print_progress(i,len(required_packages))

    if  (len(package_info.split(",,,"))==2): # 用于校验下载路径是否正确
        name,download_link = package_info.split(",,,")
        if download_link[:15]=="https://pypi.tuna.tsinghua.edu.cn"[:15]:
            util_spider_obj.download_file(
                download_dir_base, # packages的下载路径文件夹
                name, # package的名字
                download_link, # package的下载链接
                save_dir_his=download_dir_base) # packages的下载路径文件夹,用以检查是否该文件是否已经存在了
        
    else:
        error_txt.write(str(package_info+"\n"))
    
 

        如果是在linux中下载pypi包,基本上不会出什么问题,但是如果是在win10环境下执行以上程序的话,可能存在下载的文件的文件名不符合windows的格式的情况,因此需要对文件名做一些格式审查,这时可以用下面的程序下载pypi文件:

step2_download.py 在win10中使用

import os 
import requests
import re
from bs4 import BeautifulSoup
import pandas as pd
import csv 
import shutil
import glob
import numpy as np

from util.util_folder import Class_Util_Folder
from util.util_spider import Class_Util_Spider

util_folder_obj = Class_Util_Folder()
util_spider_obj = Class_Util_Spider()

search_url_base = "https://pypi.tuna.tsinghua.edu.cn/simple"
download_url_base = "https://pypi.tuna.tsinghua.edu.cn"

download_dir_base = "./pypi-packages/"

# 获取requirements.txt
# requirements_txt = "./requirements_all.txt"
# if not os.path.exists(requirements_txt):
#     child_links = util_spider_obj.get_child_links(search_url_base)
#     util_spider_obj.get_grandson_links_names(child_links,"requirements_all.txt")

# 获取已经下载的python包列表
# downloaded_txt = "./downloaded.txt"
# if not os.path.exists(downloaded_txt):
#     util_folder_obj.get_file_name_list(download_dir_base,downloaded_txt)

# # 读取requirements.txt,下载package
error_txt = open("./errors.txt","w+")
requirements_txt = "./pypi_requirements_all.txt"
required_packages = util_folder_obj.read_txt_2_list(requirements_txt)

download_dir_base = download_dir_base

# for i,package_info in enumerate(required_packages):
# for i in range(838628, 2000000):
for i in range(0, len(required_packages)):
    package_info = required_packages[i]
    util_folder_obj.print_progress(i,len(required_packages))

    if  (len(package_info.split(",,,"))==2):
        name,download_link = package_info.split(",,,")
        # print("name=",name)
        # print("link=",download_link)
        ## 在win10系统中,文件名中不允许包含以下符号,因此,文件名红包含以下符号的python包不下载。在linux中不存在这种情况。
        if (download_link[:15]=="https://pypi.tuna.tsinghua.edu.cn"[:15]\
             and (":" not in name)\
            and ("*" not in name)\
            and ("?" not in name)\
            and ("<" not in name)\
            and (">" not in name)\
            and ("[" not in name)\
            and ("]" not in name)\
            and ("\\" not in name)\
            and ("/" not in name)\
            and ("|" not in name)):
            util_spider_obj.download_file(download_dir_base,name,download_link,save_dir_his=download_dir_base) # 下载文件
        else:
            error_txt.write(str(package_info + "\n"))
    else:
        error_txt.write(str(package_info+"\n"))
    
 

5. 步骤三:检查下载的pypi文件名是否符合pip2pi的要求(仅仅在win10系统中搭建镜像时使用,在linux系统中不用)。

       pip2pi在执行dir2pi时对python包的文件名有要求(在win10中),不符合该命名格式要求的将会在执行dir2pi时出现错误与中断,这是一个十分费时费力的过程。为了避免该情况,我对文件名格式进行了审查,将不符合pip2pi格式要求的进行了移除处理。 以下脚本参考了pip2pi的源码,

import os 
import re
import glob
import shutil
import pkg_resources

# 获取文件名列表

# 遍历文件名判断文件名格式是否符合格式要求

# 如果不符合格式要求,打印该文件名

class InvalidFilePackageName(ValueError):
    def __init__(self, file, basedir=None):
        msg = "unexpected file name: %r " %(file, )
        msg += "(not in 'pkg-name-version.xxx' format"
        if basedir:
            msg += "; found in directory: %r" %(basedir)
        msg += ")"
        super(InvalidFilePackageName, self).__init__(msg)

def check_package_name(file, basedir=None):
    """ Returns the package name for a given file, or raises an
        ``InvalidFilePackageName`` exception if the file name is
        not valid::

        >>> file_to_package("foo-1.2.3_rc1.tar.gz")
        ('foo', '1.2.3-rc1.tar.gz')
        >>> file_to_package("foo-bar-1.2.tgz")
        ('foo-bar', '1.2.tgz')
        >>> file_to_package("kafka-quixey-0.8.1-1.tar.gz")
        ('kafka-quixey', '0.8.1-1.tar.gz')
        >>> file_to_package("foo-bar-1.2-py27-none-any.whl")
        ('foo-bar', '1.2-py27-none-any.whl')
        >>> file_to_package("Cython-0.17.2-cp26-none-linux_x86_64.whl")
        ('Cython', '0.17.2-cp26-none-linux_x86_64.whl')
        >>> file_to_package("PyYAML-3.10-py2.7-macosx-10.7-x86_64.egg")
        ('PyYAML', '3.10-py2.7-macosx-10.7-x86_64.egg')
        >>> file_to_package("python_ldap-2.3.9-py2.7-macosx-10.3-fat.egg")
        ('python-ldap', '2.3.9-py2.7-macosx-10.3-fat.egg')
        >>> file_to_package("python_ldap-2.4.19-cp27-none-macosx_10_10_x86_64.whl")
        ('python-ldap', '2.4.19-cp27-none-macosx_10_10_x86_64.whl')
        >>> file_to_package("foo.whl")
        Traceback (most recent call last):
            ...
        InvalidFilePackageName: unexpected file name: 'foo.whl' (not in 'pkg-name-version.xxx' format)
        >>> file_to_package("foo.png")
        Traceback (most recent call last):
            ...
        InvalidFilePackageName: unexpected file name: 'foo.png' (not in 'pkg-name-version.xxx' format)
        """
    file = os.path.basename(file)
    file_ext = os.path.splitext(file)[1].lower()
    if file_ext == ".egg":
        dist = pkg_resources.Distribution.from_location(None, file)
        name = dist.project_name
        split = (name, file[len(name)+1:])
        to_safe_name = lambda x: x
        to_safe_rest = lambda x: x
    elif file_ext == ".whl":
        bits = file.rsplit("-", 4)
        split = (bits[0], "-".join(bits[1:]))
        to_safe_name = pkg_resources.safe_name
        to_safe_rest = lambda x: x
    else:
        match = re.search(r"(?P<pkg>.*?)-(?P<rest>\d+.*)", file)
        if not match:
            return False
        split = (match.group("pkg"), match.group("rest"))
        to_safe_name = pkg_resources.safe_name
        to_safe_rest = pkg_resources.safe_name

    if len(split) != 2 or not split[1]:
        return False

    return True

def file_name_match(file_name):
    match = re.search(r"(?P<pkg>.*?)-(?P<rest>\d+.*)", file_name)
    return match

def move_file_2_dir(file_path,dir_path):
    file_name = os.path.split(file_path)[-1]
    move_path = os.path.join(dir_path,file_name)
    shutil.move(file_path,move_path)


if __name__ =="__main__":
    # #### 第一步: 查找名命名不符合要求的文件
    src_dir = "E:\pypi-packages"
    error_dir = "E:\pypi-packages-error"

    file_name_list = glob.glob(src_dir+"/*.*")
    for f_path in file_name_list:
        correct = check_package_name(f_path)

        if not correct:
            move_file_2_dir(f_path,error_dir)
            print(f_path)

    ###### 第二步:尝试修改文件名成标准格式
    # file_name ="aimmo-v-0.1.1-alpha.post.dev1.tar.gz"
    # match = file_name_match(file_name)
    # print(match)

    #### 第三步:string.replace尝试
    # file_name ="aimmo-v0.1.1-alpha.post.dev1.tar.gz"
    # file_name_new = file_name.replace("-v", "-v-")
    # print(file_name_new)

    #### 第四步: 修改包含v的package
    # corrected_dir= "D:\pypi-build-master\pypi-packages-errors"
    # error_dir = "D:\pypi-build-master\pypi-packages-corrected"
    # file_name_list = glob.glob(error_dir+"/*.*")

    # for f_path in file_name_list:
    #     f_name = os.path.split(f_path)[-1]
    #     file_name_new = f_name.replace("-v", "-v-")
    #     file_name_new = f_name.replace("-V", "-v-")
    #     file_name_new = f_name.replace("_V", "-v-")
    #     file_name_new = f_name.replace("_v", "-v-")

    #     if "-v-" in file_name_new:
    #         file_save_path = os.path.join(corrected_dir,file_name_new)
    #         shutil.move(f_path,file_save_path)

    #### 第五步:再次校验命名是否符合要求
    # dir_path= "D:\pypi-build-master\pypi-packages-corrected"
    # error_dir = "D:\pypi-build-master\pypi-packages-errors"

    # file_paths = glob.glob(dir_path+"/*")
    # for f_path in file_paths:
    #     f_name = os.path.split(f_path)[-1]
    #     match = file_name_match(f_name)

    #     if not match:
    #         move_file_2_dir(f_path,error_dir)
    #         print(f_name)

    #### 第六步:把修正后的文件放回pypi库
    # dir_path= "D:\pypi-build-master\pypi-packages-corrected"
    # build_dir = "D:\pypi_mirror_build\pypi-packages"

    # file_paths = glob.glob(dir_path+"/*")
    # for f_path in file_paths:
    #     f_name = os.path.split(f_path)[-1]
    #     match = file_name_match(f_name)

    #     if match:
    #         move_file_2_dir(f_path,build_dir)
    #         print(f_name)
    
    ##第七步:创建dir2pi
    #  


    
 

6. 在win10中安装pypi镜像时的其它注意事项

        如在从零搭建本地pypi镜像源1:快速体验_wzg2016的博客-优快云博客中介绍的,在执行dir2pi之后,会生成很多index.html文件,也会生成一些其他的文件,但是搭建镜像只需要index.html文件就可以了,通过copy-paste可以达到仅仅保留index.html文件的目的,因为剩余的文件不符合win10的格式要求。

        另外,建议把simple文件夹重命名,比如重命名为"simple-wzg16",避免simple文件夹与已有文件夹重名,在执行nginx.exe时出现误判。

7. 获取requirements_all.txt更新

        代码被不小心删除了,这里只说一下当时的执行思路。

        首先:保存上一次获取的 requirements_all.txt

        然后,获取更新后的 requirements_all.txt

        最后,把两个txt文件读取为两个list后,转为set()格式,执行相减,得到最近更新的python包,把这些包保存即可。

8. 为什么选择了pip2pi方式,而把不是pypi-server方式?

        原因:pip2pi方式可以生成本地文件,每次开机后用nginx可以快速启动。pypi-server的使用也十分方便,但是如果每次开机都要重新启动到可以执行使用的程度,需要的时间比较长,因此我使用pip2pi的方式。

9. 更新pypi包后,如何快速更新index.html列表?待定。

同步清华镜像源,制作本地pip镜像源 同步清华镜像源,制作本地pip镜像源访问清华源下载建立索引启动pip服务客户端测试 为了方便国内用户使用pip 模块,国内很多已经配置专用的pip镜像源 国内镜像源 阿里云 http://mirrors.aliyun.com/pypi/simple/ 豆瓣http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/ 阅读详情

相关推荐

5分钟搞定:用Docker快速搭建PyPI本地镜像源(附豆瓣源加速配置)

本文详细介绍了如何利用Docker和Bandersnatch工具,快速搭建并优化企业级PyPI本地镜像源。通过Docker容器化部署,结合国内豆瓣源等镜像加速配置,实现稳定、高速的Python包管理,并提供了自动化同步、Nginx服务配置及客户端使用的完整解决方案。

weixin_28839629的博客 153

搭建自己的pypi镜像库

http://127.0.0.1:8000/simple/,就可以看到搭建好的镜像库啦~可以手动下载自己需要的文件包到该目录下,或者利用清华镜像库来下载所有的文件包。(1)将清华pypi镜像库文件列表粘贴到requirement.txt文件中。

wzg2016的博客 5387

pip命令镜像源、镜像源、pip安装库、python、python镜像源、清华镜像源配置

使用Python的镜像源是一个很好的解决无法连接到Python包索引源的方法。在中国,我们有多个镜像源可供选择。你可以使用以上步骤来安装第三方库,并根据需要设置默认镜像源。希望这篇文章能帮助你顺利地学习和开发Python。

AndroidAlvin的博客 3541

清华镜像源地址(国内下载python包必备地址)

清华镜像源地址

weixin_42367693的博客 13万+

EDA的未来:当AI与Cadence Virtuoso相遇

本文探讨了AI技术与Cadence Virtuoso在EDA领域的融合,展示了如何通过生成式AI提升芯片设计效率。文章详细分析了Virtuoso设计环境的智能化演进、AI驱动的设计辅助功能实现路径,以及SKILL语言的进化方向,为工程师提供了未来EDA工具的发展趋势和实用案例。

weixin_28312391的博客 650

2023东华大学机试OJ进阶版1-81题

先排序。每次找两个最小的数,把其中一个置为两数之和,并累加这个和值,另一个数置为-1,然后再排序,重复操作,直到只剩下一个数。105。

m0_49263811的博客 2796

【Python】【PyPi】搭建本地PyPi镜像源

搭建本地PyPi镜像源,主要是便于局域网内部用户安装Python模块。配置流程不算复杂,按步进行即可。

非凡博客 4744

【71页PPT】工业40及智能制造解决方案(附下载方式)

2013年,工业4.0平台发布白皮书,正式确立其发展战略。工业4.0不仅是技术的升级,更是制造业思维的重构。工业4.0的核心是通过信息物理系统(CPS)实现工厂内外的互联,构建高度灵活的个性化生产模式。它不仅是技术革新,更是一种生产方式的变革,使传统行业界限模糊化,催生新的商业模式和合作形式。德国作为制造业强国,其GDP的25%和出口总额的60%依赖制造业,因此工业4.0成为其维持全球领先地位的重要战略。CPS是工业4.0的基石,通过计算、通信与控制技术(3C)实现物理世界与信息世界的深度融合。

2501_92808811的博客 950

pip镜像源:清华镜像、阿里云镜像、豆瓣镜像与如何修改默认镜像源

🚀 探索pip镜像源:从清华到阿里云,再到你的默认设置 🔧 👋 嗨,Python开发者!是否曾烦恼于pip包下载速度慢?这篇文章将带你走进pip镜像源的世界,解锁清华、阿里云、豆瓣等国内顶级镜像源的秘密!🏫🌤️📚 🤝 最后,希望这篇文章能成为你Python开发路上的得力助手,让我们在代码的世界里并肩前行!🌈

创作高质量博文,分享知识,共同进步! 2万+

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 575

【智能车Code review】—曲率计算、最小二乘法拟合

【1】曲率计算函数 选三个点计算曲率 float process_curvity(byte x1, byte y1, byte x2, byte y2, byte x3, byte y3) { float K; int S_of_ABC = ((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)) / 2; //面积的符号表示方向 byte q1 = (byte)((x2 - x1) * (x2 - x1) + (y2 - y1) *

hanhan的博客 1万+

【Python】Anaconda以及Pip配置清华镜像源

为了提高安装速度和稳定性,选择使用国内的镜像源,如清华镜像源。可以加快下载速度,并减少下载失败等问题。

weixin_44914727的博客 13万+

GEE生物量碳储量——利用sens和MK检验方法计算1987-2022年森林地上生物量AGB和碳储量的时空变化特征

本文是将之前已经处理好的森林生物量和碳储量数据保存到GEE Assets中,然后分别将单张影像导入到代码编辑器中,构建一个时间序列集合,并且这里需要用到的是我们给影像添加指定的时间属性,这样方便进行下一步的时序分析和空间预测。首先,需要收集1987年至2022年期间森林地上生物量AGB和碳储量数据。该数据可以通过森林清查数据、卫星遥感数据等途径获取。然后,根据这些数据,可以使用sens(敏感性分析)和MK(Mann-Kendall)方法计算时空变化特征。

此星光明博客 1264

通过清华镜像源加速下载pytorch——(pip版本)

通过conda下载可以参考这篇文章: pip使用清华镜像源1 临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 把some-package替换为所需模块即可(还真有个模块叫some-package) 设为默认 pip config set global.index-url https://pypi...

WannaSeaU的博客 6万+

【RT-DETR涨点改进】小目标检测、特征融合改进篇 | TGRS 2024 | RT-DETR引入CSFM上下文选择融合模块,适合多模态检测、红外小目标检测、小目标检测、遥感目标检测等任务有效涨点

本文提出了一种改进RT-DETR目标检测模型的方法,通过引入上下文选择融合模块(CSFM)显著提升复杂背景下小目标和低对比度目标的检测精度。CSFM模块采用多尺度特征融合和动态特征选择机制,有效增强模型的全局上下文感知能力,同时保留细节特征。该模块通过通道减少机制和空间信息调节,实现从粗到细的特征聚合,减少误报并提高轮廓检测精度。实验表明,改进后的RT-DETR模型在多个基准测试中表现优异,计算效率与检测精度均优于现有方法。文章还详细介绍了模块配置和yaml文件修改方法,为模型部署提供指导。

Ai缝合怪、助力小伙伴高效发论文 1724

基于STM32设计的水下水质检测装置(微信小程序)(205)

本项目设计了一款基于STM32微控制器为核心的水下水质检测设备,该设备具有高度集成化、智能化的特点,能够实时监测水深、温度、浊度及溶解性总固体(TDS)等关键水质参数,并通过4G网络将数据上传至腾讯云IOT物联网平台,实现远程监控和数据分析。同时,为了便于操作和移动观测,还配套开发了微信小程序,用户可通过微信小程序实时查看并控制设备的各项功能,如调整下潜深度等。

1250

pip添加清华镜像源

楼主在用pip安装tensoflow-gpu,国外网站下载速度太慢导致中断,添加pip下载源pip清华镜像源`,网速杠杠的,用pip安装python包特别方便,楼主原来用conda安装,后来发现pip,还是pip好用,conda的清华镜像源中python的很多包(如tensorflow,pytorch等)都更新的不及时甚至都没有, 更新pip,添加清华镜像源,下载python包十分方便。 1.跟新...

eefresher的博客 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ubuntu: 搭建pypi镜像源

比较简单,这里只简要记录流程。

wzg2016的博客 1175

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python 使用清华大学镜像源

官方地址 首先,如果只是临时下载一个包 那么可以使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 要下的包名 如果是永久修改镜像源 pip install pip -U pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 如果网络不好...

liuYinXin的博客 13万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

清华镜像源下载pytorch及torchvision

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channe...

岛的博客 2万+

使用清华、豆瓣镜像源下载tensorflow

由于区域限制,国内用户使用pip下载python库就会特别慢,一些大的包容易超时报错,比如tensorflow 使用国内镜像源来下载会提升下载速度,以tensorflow为例,下其它的包换名即可 清华镜像源: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow 清华的包比较全,但用的人多容易

weixin_50775137的博客 2449

利用清华镜像源同步官方PyPI提升TensorFlow安装成功率

在国内网络环境下,通过切换至清华大学PyPI镜像源可显著提升TensorFlow安装速度与成功率。利用高速CDN和 hourly同步机制,安装时间从数十分钟缩短至几分钟,适用于本地开发、Docker构建及团队协作场景,大幅提升AI开发效率。

weixin_42589700的博客 906

Python配置清华镜像源

Python配置清华镜像源 1.前言 使用pip 安装服务器在国外的python 库时,下载需要很长时间,在配置文件中设置国内镜像可以提高速度,清华镜像源就是其中之一。 2.pypi 镜像使用帮助 网址:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 3.临时配置 若只是临时下载一个python库的话,则可使用以下命令进行配置: pip instal...

闫小亘的博客 11万+

清华镜像源替换pip源的三种方法

针对国内网络环境下pip安装Python包缓慢的问题,介绍了通过清华镜像源提升下载速度的三种实用方法:临时命令指定、用户级配置和虚拟环境级配置。每种方法适配不同场景,从个人开发到团队协作均有覆盖,显著提升依赖安装效率,尤其在深度学习项目中效果明显。

weixin_42476987的博客 1490

使用清华源替代官方pypi源,极速完成TensorFlow安装

本文介绍如何通过清华大学TUNA镜像源加速TensorFlow的安装,解决国内用户使用官方PyPI源下载慢、连接超时等问题。实测安装时间从十几分钟缩短至十几秒,大幅提升AI开发环境搭建效率,适用于个人开发、教学部署及CI/CD流水线。

weixin_35238815的博客 1040
上一篇: 从零搭建本地pypi镜像源1:快速体验
下一篇: 如果搭建一个本地的conda镜像(包含bioconda)
wzg2016
博客等级 码龄10年 539粉丝 493原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值