说明最近在搞涉及到机器学习的项目,需要用到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 Hub上查找Python镜像。
-
找到后,执行docker pull。以3.8.10为例
docker pull python:3.8.10
-
查看/启动镜像
# 查看镜像列表 docker image ls -a # 启动镜像为容器 docker run -itd python:3.8.10 bash # 查看所有运行中的容器 docker ps
-
在docker ps结果中,找到python对应的containerId,进入容器
# 我的containerId是71c6aba263b9 docker exec -it 71c6aba263b9 bash
-
执行python命令
python --version
线上机器一般没有外网,所以离线安装包很有意义。
知道程序依赖哪些包# 将本地所有的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.txtvenv使用
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



