参考网址: 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 line/ 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={dest%/}
if ! echo $dest |grep -q "^/"; then echo "Error: please use the absolute path." exit 1 fi
if ! ls "; 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 "; 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 server_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
客户端使用: