# Python虚拟环境

拥有多个`python`解释器是很正常的事情，我们需要厘清其中的关系，不要觉得多就是乱。

### `Conda`:一个成熟的`Python`环境管理工具

通常意义上`Anaconda`作为`Python`的一个发行版本，我们将其当做一个，附赠`jupyter`、`spyder`等`IDE`、下载即安装`pandas`、`numpy`等数据科学类库的`Python`是没有任何问题的。

实际上`Anaconda`最强大的工具就是`conda`，以往我们可以用pip进行Python类库的管理，现在我们可以用conda替代，甚至`Anaconda Navifator`提供了图形化的类库管理界面，可以通过点点实现类库的管理。

### 虚拟环境

我所认为的虚拟环境就是`python`的分身，我们将安装`Anaconda`赠送`Python`作为`base`(因为在有了虚拟环境后，这个`python`后往往都接着一个`base`)。通过创建虚拟环境，这个`base`通过复制（只保留基础类库），得到了虚拟环境，可以理解为一个全新的`Python`，在运行`Python`程序的时候可以指定用哪一个`Python`。

不同的项目需要的类库支持往往不一样，当`base`安装的类库居多时，容易发生包之间的版本冲突或不匹配，所以为不同的类型的项目创建一个单独的虚拟环境（`python`）是非常有必要的。

### 创建虚拟环境

这样的创建过程有很多种方式可以完成：

* `Clone`项目时，`Pycharm`询问是否为该项目创建一个虚拟环境，如果选择创建，就会在该项目文件下新建一个`envs`文件夹，用于存放新的`python`和该项目接下来需要的包。当然你也可以不选择创建，直接使用已有的环境就成（`base`或者其他的虚拟环境）
* 使用`Anaconda Navifator`创建，点点界面实在是很友好，所以很推荐这种方式创建虚拟环境，并且可以在这直接装好包。
* 当让是可以使用终端创建，详细的就看别人的[介绍](https://blog.csdn.net/SARACH_WONG/article/details/89328307)就成。

### 使用虚拟环境

在`Pychram`中可以通过配置项目解释器的方式指定解释器，但是你会发下`Pycharm`中的终端还是`base`解释器，在那装包还是装到`base`上了，这个时候需要在`Pycharm`设置中将工具>终端>应用程序设置>`Shell`路径改为`C:\Windows\system32\cmd.exe`，这样以来终端中就是项目的环境了。

另外就是如果不用`Pycharm`，需要先激活`activate`指定环境，然后再运行程序，或者直接`cd`到`envs`路径下，再运行程序，也可以达到目的。

### 一些命令

*   查看本地所有的虚拟环境

    ```shell
    conda info -e  
    ```
*   激活指定环境

    ```shell
    activate scrapy
    ```
*   关闭已经激活的环境

    ```shell
    conda deactivate
    ```
