参考网址: https://www.cnblogs.com/lovesKey/p/14160177.html

总的pypi镜像大小约为16T,使用的工具是pip download+pip-server


搭建:

vi requirement.py

import requests

import bs4

htext=requests.get("https://pypi.org/simple/").text bobj=bs4.BeautifulSoup(htext) with open("requirement.txt","w+") as f: for a in bobj.find_all('a'): # print(a.string) f.write(a.string+'\n') :wq

python3 requirement.py

此时会生成requirement.txt文件

vi download.sh

#!/bin/bash

#pips=http://pypi.doubanio.com/

file=/home/super/requirement.txt

初始化下载环境(清华镜像源)

echo " Initialize download environment "

mkdir /home/super/.pip/ cat << END > /home/super/.pip/pip11.conf [global] index-url = https://pypi.org/simple [install] trusted-host = https://pypi.org

END

while read line do sudo mkdir /space/pypi/web/simple/$line sudo pip download Ubuntu20.04搭建pypi镜像源方法2_pypiserverline/ done < $file

echo "pip is already。"

:wq

sh download.sh

会进行下载

建立索引:

vi init_index.sh

#!/bin/bash

set -x

if [ $# -ne 1 ]; then echo "Usage: $0 packages_dir" exit 1 fi

[ ! -d $1 ] && echo "Error: you should provide a directory." && exit 1

dest=Ubuntu20.04搭建pypi镜像源方法2_pypiserver_02{dest%/}

if ! echo $dest |grep -q "^/"; then echo "Error: please use the absolute path." exit 1 fi

if ! ls Ubuntu20.04搭建pypi镜像源方法2_pypiserver_03"; then echo "Note: nothing need to do." exit 0 fi

#--------------------------------------------- TOPDIR=$(cd $(dirname "$0") && pwd) tmpdir=mktemp -d #---------------------------------------------

for i in ls ${dest}/{*.gz,*.zip} 2>/dev/null do rm -rf $tmpdir/* cp $i $tmpdir cd $tmpdir package_arch_name=ls if echo Ubuntu20.04搭建pypi镜像源方法2_pypiserver_04"; then tar xf $package_arch_name gz_suffix=1 else unzip $package_arch_name gz_suffix=0 fi rm -rf $package_arch_name package_name=ls cd $package_name if ls |grep -q "egg-info"; then python setup.py egg_info python setup.py build cd .. if [ $gz_suffix -eq 1 ]; then tar czf $package_arch_name $package_name else zip -r $package_arch_name $package_name fi rm -rf $i cp $package_arch_name $dest/ fi cd $TOPDIR done

rm -rf $tmpdir :wq

sh init_index.sh /space/pypi/web/simple

pip install pypiserver

pypi-server run /space/pypi/web/ &

netstat -ntpl | grep 8080

访问:http://ip:8080/simple

客户端使用:

pip install xxx -i http://ip:8080/simple --trusted-host ip

可以再做个nginx https的反向代理

apt-get install nginx

vi /etc/nginx/sites-enabled/defaults (defaults可以直接复制default,注意timeout时间需调大,数据量太大需要时间加载)

listen 80 default_server;

listen [::]:80 default_server;

listen 443 ssl default_server;

ssl on;

ssl_certificate /etc/nginx/ssl/ming.crt;

ssl_certificate_key /etc/nginx/ssl/ming.key;

location / {

proxy_pass http://127.0.0.1:8080;

proxy_redirect http://127.0.0.1:8080 $scheme://127.0.0.1:8080;

proxy_set_header Host Ubuntu20.04搭建pypi镜像源方法2_pypiserver_05server_port;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_read_timeout 3000;

proxy_connect_timeout 3000;

:wq

systemctl restart nginx

systemctl enable nginx

客户端使用:

pip install xxx -i https://xxx.ming.com/simple