搭建自己的pip源

搭建自己的pip源
https://www.jianshu.com/p/799b3490ad6d

基础环境:
Ananconda 3 版本5.1以上,python3.6环境

外部机器:
pip download bandersnatch
下载了一堆包,安装pip install bandersnatch-3.6.0-py3-none-any.whl
发现又download了三个包,所以这三个包也重新下载了下,放在同一目录下。后续在其他机子上该目录下执行上述命令即可。

发现只能使用官方源下载,具体原因在下面文章中:
http://blog.sina.com.cn/s/blog_82fefc100102y1xx.html

参考了 https://blog.csdn.net/gaisylly/article/details/50910677 原来官网的源是用xml rpc接口获取包信息,三方源不开放这个接口,所以没法玩。

(后面部分转载)
因此,通过修改配置文件中的master源的方法看来是不行了。那就尝试一下能不能在下载环节进行加速,包列表还是向官网获取,下载地址指向国内地址也行,毕竟,同步的大部分时间是花在下载过程中的。

经过对比发现,豆瓣网的pypi源存储地址和官方源的结构是一样的只是域名部分的差别,让从官方下载的包,改为从豆瓣网下载。

试着从bandersnatch源码入手看看能不能解决这个问题。

发现bandersnatch源码的master.py第39行get函数是作用下载文件:

搭建自己的pip源_第1张图片
1.jpeg

该函数被多个地方调用,因此,复制该函数,再建立一个cn_get函数,修改该函数,替换包下载地址的域名部分,实现从douban下载。修改后的部分源码为:

搭建自己的pip源_第2张图片
2.jpeg

在package.py的309行附近,修改调用master.get方法为cn_get。(老版本在197行附近,加密方式hashlib.md5())

搭建自己的pip源_第3张图片
3.jpeg

新版本中代码位置有所调整,以下是新版本中修改:
master.py 中,拷贝get文件为get_aliyun,内容修改为

    def get_aliyun(self, path, required_serial, **kw):
        logger.debug(f"Getting {path} (serial {required_serial})")
#        print('self.url=',self.url, 'path=',path)
        aliyun_url = "https://mirrors.aliyun.com/pypi"

        if not path.startswith(("https://", "http://")):
            path = os.path.join(aliyun_url, path)
        else:
            idx = path.find('/packages/')
            if idx < 0:
                raise Exception("Invalid Url!")
            path = aliyun_url + path[idx:]

package.py文件中(约375行左右),修改为:

r = self.mirror.master.get_aliyun(url, required_serial=None, stream=True)

开始拉文件了

bandersnatch -c /etc/bandersnatch.conf mirror

搭建自己的pip源_第4张图片
4.jpeg

除去失败的,居然要850G空间,丧心病狂啊!

===================================
因为阿里云可能与官网实际不同步,有时间差。所以我们这边同步的时候,某些包更新会失败。建议先去 https://developer.aliyun.com/mirror
看看,是否已经同步,已经同步的话,我们就执行同步。

后面就是搭http服务,提供下载服务了。

你可能感兴趣的:(搭建自己的pip源)