Flask 搭建内网 pip镜像源

本文详细描述了如何使用Flask搭建内网pip镜像源,包括制作离线Docker镜像、下载第三方包、建立索引以及在目标服务器上部署和测试的过程。
摘要由CSDN通过智能技术生成

Flask 搭建内网 pip镜像源

如果目标服务器已经安装了nginx,可以参考其他流程,也可以参考这个流程。

1. 制作带有flask的离线docker镜像

以下要在有公网服务器上操作

1.1 创建一个flask目录,并进入
mkdir flask
cd flask
1.2 创建一个pip.conf文件,将pip镜像源写进去

当内网内的镜像源搭建好之后,可以重新创建一个镜像,然后更改此处的index-url为自己搭建好的镜像地址

tee pip.conf <<-'EOF'
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple
EOF
1.3 编写Dockerfile文件
FROM python:3.7-alpine
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories && \
    echo http://mirrors.ustc.edu.cn/alpine/v3.7/community >> /etc/apk/repositories
RUN apk update && apk upgrade
RUN mkdir app/download_folder
RUN mkdir $HOME/.pip/
COPY ./pip.conf $HOME/.pip/
RUN pip install flask
EXPOSE 5000
CMD ["flask", "run"]
1.4 执行docker build命令进行镜像构建
docker build -t myflask:1.0 .

确认是否构建成功

docker images
1.5 打包成离线镜像
docker image save -o flask.tar myflask:1.0

2. 下载第三方包

以下要在有公网服务器上操作
退出上面创建的目录位置,重新创建一个文件夹

cd ..
mkdir download_folder
2.1 批量导出当前开发环境的包信息
pip freeze > requirements.txt

建议先跳过以下部分,等步骤走完没问题,再回头重新走下面步骤
=============================== 我是分割线 ===============================
将清华pypi镜像库文件列表粘贴到requirement.txt文件中。

import requests
import re
report = requests.request('get','https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/')
# print(report.text)
text_str = str(report.text).split('\n')
with open('requirement.txt','w+') as f:
    for i in text_str:
        temp = re.findall('<a href="(.*?)/">',i)
        # print(i,temp)
        if temp != []:
            f.write(str(temp[0])+'\n')
 

=============================== 我是分割线 ===============================

2.2 下载requirements内的包及其依赖到【download_folder】
pip download -r requirements.txt -d download_folder
2.3 建立索引

安装pip2pi

pip install pip2pi

建立索引

dir2pi -S download_folder

然后文件夹内就出现了一个simple文件夹,这里的内容就和阿里、清华、豆瓣的源差别没那么大了。

2.4 编写test.py和files.html

退出上面创建的目录位置,重新创建一个文件夹

cd ..
mkdir myapp
cd myapp
from flask import Flask, render_template, send_file, abort
import os

app = Flask(__name__)

UPLOAD_FOLDER = './download_folder'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def get_files_and_folders(path):
    files_and_folders = []
    for item in os.listdir(path):
        item_path = os.path.join(path, item)
        if os.path.isdir(item_path):
            files_and_folders.append((item, 'folder'))
        else:
            files_and_folders.append((item, 'file'))
    return files_and_folders

@app.route('/', defaults={'req_path': ''})

@app.route('/<path:req_path>')
def dir_listing(req_path):

    # Joining the base and the requested path
    abs_path = os.path.join(UPLOAD_FOLDER, req_path)

    # Return 404 if path doesn't exist
    if not os.path.exists(abs_path):
        return abort(404)

    # Check if path is a file and serve
    if os.path.isfile(abs_path):
        return send_file(abs_path)

    # Show directory contents
    files = os.listdir(abs_path)
    return render_template('files.html', files=files)

if __name__ == '__main__':
    app.run(debug=True)

创建templates文件夹,再创建一个files.html

mkdir templates
cd templates
{% for file in files %}
	{% if not file.endswith('.html') %}
	<a href="{{ (request.path + '/' if request.path != '/' else '') + file }}">
	    {{ file }}
	</a> 
	<br />
	{% endif %}
{% endfor %}
2.5 测试
python myapp/test.py

运行结果

3. 加载离线镜像

以下要在目标服务器上操作
把上述第一步的镜像和第二步创建的文件上传到目标服务器

3.1 加载离线镜像
docker load -i flask.tar
3.2 运行docker服务
docker run --name myapp --rm -d -p 7080:5000 -v ./myapp:/app -v ./download_folder:/download_folder -e FLASK_APP=/app/test.py myflask:1.0 flask run -h 0.0.0.0

4. 结束

以上就是用flask 搭建内网的步骤。用了docker部署。
也可以尝试在这里pip镜像源。

pip config set global.index-url http://127.0.0.1:70800/simple/

参考链接

Docker离线打包镜像和导入镜像
python flask 浏览带文件的目录
构建docker的flask镜像
搭建自己的pypi镜像库

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值