作者:不染心
博客:https://blog.csdn.net/qq_38234785
感兴趣的大家一起学习鸭!冲鸭!?
目的
本地开发了一个python项目,可能需要依赖复杂的库,那么如何移植、部署到容器(集群)中。
设想
1、本机上导出一个requirements.txt,然后批量在容器中安装依赖(每次都要做,费时、费力);
2、对于设想1中安装的依赖后,将整个容器保存为镜像(违背了使用过容器的初衷,可能导致镜像越来越繁杂);
3、使用虚拟环境,将项目和环境挂载到外部(√);
坑(很多坑)
宿主机上建立的虚拟环境,容器内不能使用
容器内建立的虚拟环境,宿主机上不能使用
原因:一旦建立了虚拟环境,其中的python、pip路径就固定了(不信可以试试)
一、挂载目录
宿主机:
/home/dyl/spark_compose/python_venv/
test.py
- 1
- 2
容器内:
/code/
- 1
将本地环境需要的包信息导出到文件中
pip freeze --all > requirements.txt
- 1
二、容器内搭建一个虚拟环境
(1)运行镜像并挂载
docker run -it -v /home/dyl/spark_compose/python_venv/:/code/ ubuntu:spark
- 1
进入容器即可看到挂载目录内容
root@d6c94bf712dd:/code# ls
test.py
- 1
- 2
接下来在容器内操作
(2)安装
pip install virtualenv
- 1
(3)创建运行环境
virtualenv [虚拟环境名称]
virtualenv venv
virtualenv -p python3.7 spark_env
- 1
- 2
- 3
- 4
(4)激活环境
激活环境不是必须 的,激活只是将虚拟环境的二进制目录添加到搜索路径中,这样 “python” 命令将调用虚拟环境的 Python 解释器,可以运行其中已安装的脚本,而不必输入其完整路径。但是,安装在虚拟环境中的所有脚本都应在不激活的情况下可运行,并自动与虚拟环境的 Python 一起运行。
linux:
$ cd venv
$ source ./bin/activate
- 1
- 2
Windows 10:
> cd venv
> .\Scripts\activate.bat
- 1
- 2
(5)退出环境
linux:
$ deactivate
- 1
Windows 10:
> .\Scripts\deactivate.bat
- 1
(6)删除环境
没有使用virtualenvwrapper前,可以直接删除spark_env文件夹来删除环境
三、使用
1、激活之后,使用pip list查看虚拟环境中的库;
2、pip install -r requirements.txt 在线安装依赖包;
3、运行挂载文件夹中的项目python test.py ;
4、删除容器后,虚拟环境依旧保存在挂载文件夹中,启动容器可以使用;
结语
上述操作,可以将环境项目保存在外部,将容器只作为一个平台,不对容器进行修改保存