Python程序现场部署

最近在搞涉及到机器学习的项目,需要用到python。本地开发爽歪歪,部署上线遇到了很多问题。特此记录。

说明

本地开发时,直接pip install解决依赖,import导入,愉快的调用包,一切很顺利。

但是部署上线的过程比较坎坷,碰到了以下几个问题:

  • 线上机器没有安装python,安装python的机器和本地python版本不一致
  • 线上机器没有外网,不能pip install
  • 线上机器运行了别人的python代码,依赖可能冲突

我的程序是用python3.7.9开发的,线上有台机器装有python3.8.10的环境,就只能凑合用了。

在本地用python3.7.9导出依赖包,然后传到线上进行离线安装依赖,运行时发现python版本不一样导致报错。在本地再装一个python3.8.10太费劲,于是用docker拉了个python3.8.10,在它上面重新导出依赖,上传到线上运行成功。

为了防止与别的程序冲突,使用了python的虚拟环境venv来部署。

目前程序运行还算正常。


分享以下几点操作:

  • docker安装python
  • pip离线安装包
  • venv使用

docker安装python

用docker装python还是很简单的。

  1. Docker Hub上查找Python镜像。

  2. 找到后,执行docker pull。以3.8.10为例

    docker pull python:3.8.10
    
  3. 查看/启动镜像

    # 查看镜像列表
    docker image ls -a 
    # 启动镜像为容器
    docker run -itd python:3.8.10 bash
    # 查看所有运行中的容器
    docker ps 
    
    
  4. docker ps结果中,找到python对应的containerId,进入容器

    # 我的containerId是71c6aba263b9
    docker exec -it 71c6aba263b9 bash 
    
    
  5. 执行python命令

    python --version
    

pip离线安装包

线上机器一般没有外网,所以离线安装包很有意义。

知道程序依赖哪些包
# 将本地所有的python包导出到requirements.txt
# 这是导出所有的包,不光是本项目的
pip freeze > requirements.txt


# 使用pipreqs模块可以导出本项目依赖的包
# 安装
pip install pipreqs
# 执行下面命令会将依赖导出到requirements.txt
# 执行时要指定编码,不然会报错
pipreqs . --encoding=utf-8
# 强制执行命令--force,覆盖原有的requirements.txt文件
pipreqs ./ --encoding=utf-8 --force


我在使用pipreqs时,发现导出的包不是很全。
不过依赖了哪些包,开发者应该比较清楚。

下载包到本地而不安装
执行
pip install <包名> -d <目录> 
或 
pip install -d <目录> -r requirements.txt
或
pip download --destination-directory <目录> -r requirements.txt
即可将包下载到指定目录。


如:
pip download --destination-directory /opt/project/py_req_mod -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

安装本地包
执行
pip install <目录>/<文件名>
或
pip install --use-wheel --no-index --find-links=wheelhouse/ <包名>
或
pip install --no-index -f=<目录>/ <包名>
即可安装。<包名>前有空格

如:
pip install --no-index --find-links=/opt/project/py_req_mod -r requirements.txt

venv使用

venv是python轻量级虚拟环境,其内的所有包不会对外界环境产生影响,只在虚拟环境内有效,很好的环境隔离。以下记录简单命令,详细可见参考。

# 创建虚拟环境文件夹
python -m venv python_venv

# linux激活虚拟环境
# 执行下面命令即可激活
cd /opt/project/p1/python_venv
source bin/activate

# 安装从本地导出的依赖
pip install --no-index --find-links=/opt/project/py_req_mod -r requirements.txt

# 执行我们的程序
python xxx.py

# 退出虚拟环境
deactivate

参考

pip安装依赖requirements.txt https://blog.csdn.net/deflypig/article/details/94425433

无网centos中部署python https://blog.csdn.net/SunJW_2017/article/details/89762571

pipreqs https://www.jianshu.com/p/5c30f7c5aa34

pip导出当前项目依赖包 https://blog.csdn.net/qq_43557600/article/details/108661926

Python3虚拟环境 venv搭建轻量级虚拟环境 https://blog.csdn.net/qq_22022063/article/details/78979367

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值