应用场景
当python程序需要用到不同的package的时候,可以通过conda等创建虚拟环境进行配置,若需依赖的操作系统(linux)和主机(windows)不同,可以通过虚拟机创建对应操作系统,再在虚拟机上安装python环境,这样做主要有以下缺点:
- 你不知道虚拟机上能够为你安装的python版本范围,而很多python库是严格依赖python版本的,为此你要么安装前到官网或是论坛上查找匹配的版本,要么自己一个一个尝试,十分消耗时间。
- 占用空间较大,动辄就要为虚拟机划分10到10×nG不等的空间。
为此你可以尝试用docker封装(containerize)项目需要版本的解释器,通过pycharm进行连接,从而轻松运行和debug。
准备
操作系统: Windows or macOS
软件:pycharm(一定要专业版),Docker desktop(方便管理)
Docker介绍
Docker 是一种容器化平台,用于构建、部署和运行应用程序。它通过容器化技术,将应用程序和其依赖项打包在一起,形成一个独立的、可移植的运行环境,从而实现了应用程序的快速部署和跨平台运行。
安装
参考:
https://www.jetbrains.com/help/pycharm/using-docker-as-a-remote-interpreter.html#config-docker
- 创建镜像配置文件:假设本地项目目录为
E:/local/path/to/your/file
,该目录下有一个requirements.txt
文件包含所需python环境,在该目录下创建一个Dockerfile,Dockerfile内容编辑为:
# Use Python 3.6 base image
FROM python:3.6
# Set environment variables
ENV PYTHONUNBUFFERED=1
# Install system dependencies
RUN apt-get update && apt-get install -y \
libjpeg-dev \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Python packages
RUN pip install requirements.txt
# Set the working directory in the container
WORKDIR /app
- 打开命令行,输入:
$cd/d E:/local/path/to/your/file
$docker build -t remote-kernel .
第一行是将目录切换到本地项目和Dockerfile所在目录。
第二行是根据根据Dockerfile配置文件创建名为remote-kernel的镜像并下载所需环境。
- 链接远程解释器:
再次提醒pycharm一定要专业版,白嫖方法:https://www.cnblogs.com/xinux/p/16272114.html
打开pycharm专业版,进入Settings
→Plugins
,确保Docker扩展已下载并激活(如下图)
点击进入解释器设置(Settings
→Project
→Python Interpreter
→Add...
),添加解释器选择Docker,新建一个Server,Connect to Docker daemon with:
一栏中选择Docker for Windows
(macOS选择Docker for macOS
),确定;创建server后,下拉Image name
可以看到刚刚创建的镜像Remote-kernel,选择,确定;(如下图1,2)
设置成功就可以看到一个新的解释器Remote Python 3.6.15 Docker (remote- kernel:latest) docker://remote kerel:atest//sr/local/bin/python
。最后一步:在Path mappings
一栏新建一个路径映射,将Local path
手动设置为E:/local/path/to/your/file
(项目所在的本地路径),将Remote path
设置为/opt/project
,点击确定。(如下图)
- 测试
你可以在本地新建一个test.py
def main():
print('hello world')
if __name__ == '__main__':
main()
点击运行,如果成功console会显示。
PyDev console: starting.
Python 3.6.15 (default, Dec 21 2021, 12:03:22)
[GCC 10.2.1 20210110] on linux
runfile('/opt/project/test.py', wdir='/opt/project')
hello world
恭喜你,开启你的docker之路吧~
注意事项
- 视任务复杂度,有时会用到多个内核和依赖的情况,可以使用Docker Compose,不过上述教程可以解决实际生活中大多是应用场景。
- 通过ssh来连接远程服务器中的内核也是一个广泛使用的方法,不过尝试该方法前要知道远程服务器的系统不能是Windows,如果你的本地操作系统是linux,也可以用ssh连接。
- 每次基于该remote-kernel运行一个项目或者console,docker都会为每个操作创建一个独立的container,并且随着项目运行完成不会自动删除(多次运行test.py你会在python console看到test.py(1), test.py(2)…),因此你要根据需要手动关闭console,及时释放硬盘空间。
4. 如果项目需要使用gpu支持(比如tensorflow-gpu)同样按照上述方法配置remote-kernel,在运行项目之前点击Run/Debug Configurations
,选择Edit Docker Container Settings
, 在Run Opitions
一栏中加入:
--gpus all
如下如所示:
这样在项目debug中选择console,输入:
import tensorflow as tf
print(tf.test.is_gpu_available())
输出
Out[3]: True