2023年 3月 19日

Python容器外部挂载虚拟环境以及项目探讨

作者:不染心
博客: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、删除容器后,虚拟环境依旧保存在挂载文件夹中,启动容器可以使用;

结语

上述操作,可以将环境项目保存在外部,将容器只作为一个平台,不对容器进行修改保存