离线为PyCharm配置Anaconda虚拟环境

2020-08-26

< view all posts

打开PyCharm后,新建一个项目,PyCharm会为项目创建一个pychon虚拟环境。这个环境可以是从Virtualenv、Pipenv创建,也可以是从Conda创建。为了使PyCharm和Conda方便地集成,推荐从Conda创建。

但是如果我们直接用PyCharm默认的方式创建Conda虚拟环境,在离线的电脑上会报错:CondaHTTPError: HTTP 000 CONNECTION FAILED。这是因为PyCharm默认使用联网模式创建虚拟环境,在离线的机器上无法连接到repo.anaconda.com。

创建虚拟环境:

因此,我们可以先手动离线创建一个Conda虚拟环境,之后把这个环境指定给PyCharm。有三种方式可以创建虚拟环境:

第一种是打开Anaconda Prompt,直接运行如下命令:

conda create --name py27env python=2.7 --offline

用这个命令创建的虚拟环境是干净的,Anaconda自带的包,如numpy等,不会自动被安装进来。

第二种是在创建时给环境预装软件包,只需要将软件包的名字加入命令中。如果直接加上anaconda,则会预装上anaconda自带的所有包:

conda create --name anaconda2full anaconda python=2.7 --offline

第三种是直接克隆现有的环境,如果希望把所有已经安装的软件包全都打包,可以用这种方式:

conda create --name clone_of_base --clone root

前两种方式,命令中的 --offline 参数指定了conda在不联网的情况下创建环境,另外需要注意的是,前面两种方式必须指定python的版本,例如 python=2.7,这样才会在创建的虚拟环境目录中生成对应的python.exe文件。在运行命令时,程序会打印如下的提示,告诉我们虚拟环境的创建位置。可以记录下这个目录。

## Package Plan ##

environment location: C:\Users\xxx\AppData\Local\Continuum\anaconda2\envs\anaconda2env

这里先提一下虚拟环境在Pycharm中的指定方式:在环境创建完成后,可以进入PyCharm,选择Add Interpreter,之后选择exsisting environment。在Interpreter这栏,输入虚拟环境目录中python.exe的路径,在Conda executable这栏,输入\anaconda2\Scripts\conda.exe的路径。之后我们可以勾选Make available to all projects,这样之后创建的项目也都可以使用这个虚拟环境了。

虚拟环境中包的安装

如果新创建的是干净的环境,Anaconda自带的一些包并不会在创建时自动装上。要离线将Anaconda安装时自带的工具包引入环境,可以加上--offline参数来使用conda install 命令,例如:

conda install numpy --offline

如果要按照的包不是Anaconda安装时自带的,可以在联网的机器上使用 conda install --download-only 进行下载,下载的包会保存在 Anaconda root/pkgs 目录下。之后使用如下命令安装:

conda install --offline /path/packagename.tar.bz2

使用conda pack转移虚拟环境

至此为止我们还都是在有网络的机器上进行的配置,下面要将已经准备好的虚拟环境转移到离线的机器上。

conda自带的环境导出,只是导出一个package列表,在导入时需要联网重新获取package,是没法离线使用的。而通过conda pack,可以直接对联网机器的conda环境打包,复制到离线机器上。

首先在联网的机器上安装conda-pack:

conda install conda-pack

使用命令将已有的虚拟环境打包:

conda pack -n env_name -o outname.tar.gz

复制创建的压缩包到离线机器上,解压到anaconda的envs目录下,比如Windiws下一般在:

C:\Users\username\AppData\Local\Continuum\anaconda3\envs\env_name

Linux则是在:

/anaconda3/envs/env_name

接下来,如果是Linux机器,使用命令 source my_env/bin/activate 来激活虚拟环境;Windows机器,使用Anaconda promt运行 ...\env_name\scripts\activate.bat 激活虚拟环境。

在虚拟环境中,执行命令 conda-unpack 。之后此环境就可以像在本机创建的环境一样使用。

注意只有使用conda-pack导入的虚拟环境才需要这样激活,在本机创建的虚拟环境直接使用 conda activate env_name 激活,用 conda deactivate 关闭就可以了。

另外,注意上面的命令在Linux中一定要用 source 去执行,用 ./filenamesh filename执行的命令会新建立一个子shell,继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。而用 source filename 不建立新的子shell,脚本里面所有新建、改变的环境变量都会保存在当前shell里面。

补充:如果需要一个快捷的方式激活这样创建的虚拟环境,可以打开 ~/.bashrc 并添加以下内容,之后每次使用指令 myenv 就可以直接切换到指定的虚拟环境了(修改之后需要 source ~/.bashrc 使改动生效):

alias myenv='source ~/anaconda3/envs/myenv/bin/activate'