PyCharm 解释器环境配置,使用docker,Vagrant等

2,205 阅读5分钟

概述

对于Python语言来说,环境安装是一个头疼的问题,它不像Java或Golang等语言,作为一门脚本语言,更多的是依赖于底层C++的实现。比如我们要安装MySQL的库,就需要本地要有gcc,让其能编译源码,而Python语言很多时候,只是充当封装和调用,这一点是Python的劣势,而Java因为有jvm,所以不存在这样的问题

解决方案

目前最完美的部署方案,当属docker容器,在服务器使用容器部署,可以很好的解决环境依赖问题。

当然我们今天聊的主题是如何在PyCharm开发环境中,使用docker容器作为程序运行环境

除了docker外,还有很多构建环境的方案,下面对常用的方案做演示,主要是docker和vagrant

vagrant

vagrant真的是一项非常好用的虚拟机工具,强烈推荐大家去使用,可以快速构建虚拟机

快速入门

这里对vagrant做个快速入门讲解

vagrant是一个工具,更具体的来说它是一个操作虚拟机的工具,也就是我们第一步要先安装一个虚拟机,比如VMvirtualBox,推荐virtualBox,因为virtualBox安装简单,免费。有了vagrant工具,就不再需要和virtualBox打交道了,基本都是通过vagrant命令

安装后,我们就可以快速构建虚拟机了。构建虚拟机需要使用镜像,这些镜像官方有提供,也可以基于官方镜像来修改。这样通过几行命令和配置文件,我们就实现了对虚拟机的快速构建和操作

构建虚拟机

这些工具的优秀,真不是我嘴上说说,你可以打开GitHub,大多数的项目都会提供docker和vagrant的构建文件,方便大家快速搭建环境测试代码

官网 www.vagrantup.com/

本文重点不是讲vagrant,安装流程就不赘述了,不同的操作系统都有参考,下载安装即可。如果是为了快速测试,可以使用官方的镜像,地址 app.vagrantup.com/ubuntu/boxe…

这是一个ubuntu的环境,安装好vagrant后,执行下面的命令就会去官方拉取镜像,然后启动

vagrant init ubuntu/trusty64
vagrant up

这里提供一个我用来构建集群的文件作为参考

# 创建k8s集群
# date 2019-08-17
# vanliuzhi

Vagrant.configure(2) do |config|
  # 如果需要三台就(1..3)的形式
  (1..3).each do |i|
    config.vm.define "cluster#{i}" do |node|
      node.vm.box = "centos7_base"
      node.vm.hostname = "cluster#{i}"
      node.vm.network "private_network", ip: "192.168.59.10#{i}"
      # 映射目录 根据自己实际情况配置
      # node.vm.synced_folder "../var/www/cluster", "/var/www/cluster"
      node.vm.provider "virtualbox" do |v|
        v.name = "cluster#{i}"
        # master节点
      	if i == 1
	  v.memory = 520 * 2
	  v.cpus = 2
        else
          v.memory = 520 * 4
          v.cpus = 2
        end
      end
    end
  end
end

设置

准备工作完成了(因为虚拟机自带了Python,需要其它版本的就自己装),打开pycharm,解释器设置页面

点击1处,选择show all 点击2处,添加新的解释器

可以看到pycharam为我们提供了多种方式来添加解释器

这里大致也说一下这几种环境

  • virtualenv 这是创建虚拟env用的
  • conda 这是一个Python的环境工具,软件很大,一般用在AI和数据分析,提供了很多工具
  • pipenv 也是虚拟环境的一种,是写了Python Request的大神弄的,我用过了,不好用,没能实现作者的宏伟构图

上面这三种都是基于本地的,下面的可以远程

  • SSH 提供ssh协议连接服务,使用里面的环境
  • vagrant 也是类似的,提供ssh连接vagrant的虚拟机环境
  • docker 连接docker服务,使用里面的Python环境
  • docker compose docker服务的官方编排工具,小环境可以用,线上基本被k8s取代

以上三种都是可以远程的,就是可以使用服务器的环境,比如服务器搭建了一套测试环境,大家都连接这个就不用本地搭建了

在1处我们选择vagrant环境的文件夹,一定要是文件夹,然后配置Python环境路径,确定后即可,编辑页面展示如下

主要就是配置vagrant文件夹和虚拟机中的Python环境路径

这样还不行,我们还要配置一个文件映射,因为是用虚拟机跑Python,程序需要在虚拟机中。

主要是vagrant配置文件中这一句# node.vm.synced_folder "../var/www/cluster", "/var/www/cluster" 把本地程序开发程序路径映射到虚拟机即可

选择新添加的解释器,最终效果如下

这样我们就可以使用一个虚拟机环境来开发,完全的Linux,而且还能安装Python包

docker

docker差不多也是上面的流程

dockerfile

编写dockerfile文件,安装了很多工具,不用就去了,只装Python

FROM centos:centos7
LABEL author="liuzhi<1441765847@qq.com>"

# install related packages
ENV ENVIRONMENT DOCKER_PROD
RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  && yum makecache \
  && yum install -y wget aclocal automake autoconf make gcc gcc-c++ python-devel mysql-devel bzip2 libffi-devel epel-release python-rrdtool rrdtool-devel \
  && yum clean all

# install python 3.6.5
RUN wget https://npm.taobao.org/mirrors/python/3.6.5/Python-3.6.5.tar.xz \
  && tar -xvf Python-3.6.5.tar.xz -C /usr/local/ \
  && rm -rf Python-3.6.5.tar.xz \
  && cd /usr/local/Python-3.6.5 \
  && ./configure && make && make install

# install related packages
RUN yum install -y python-pip \
  && pip3 install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \
  && pip3 install psutil \
  && pip3 install rrdtool \
  && yum clean all

# expost port
EXPOSE 15731

执行命令构建镜像 docker build -t python_env_3.6.5:1.0 .

配置环境

镜像构建好了,步骤就和vagrant类似了,下面是配置完成的结果,注意解释器的路径配置不要用默认的python,用我们新装的py3.6.5

设置项目的解释器

总结

总的来说都是很简单的操作,对pycharm熟悉,也配置过解释器,那么配置远程的解释器也是很容易的

另外需要注意的是

  • 使用vagrant的环境,优势是可以装Python包
  • 使用docker,是不能安装新的Python包的(我目前认为应该是无解的,除非构建新的镜像)。另外只需要构建镜像就行了,启动容器由pycharam执行