用conda和pip隔离Python环境

用conda和pip隔离Python环境

在同一台服务器上运行多个不同的项目,多个项目依赖同一个包的不同版本,如果这些项目都使用全局环境,会发生依赖包冲突,因此有必要引入虚拟环境对不同的项目依赖进行管理。Python的virtualenv包可以用来建立虚拟环境,但是virtualenv对于虚拟环境的管理并不方便,而且不能同时使用多个Python版本。因此采用conda配合pip进行虚拟环境和包管理。具体来说,conda可以对虚拟环境的目录做了统一的管理,也支持不同的虚拟环境对应不同的Python版本,还可以像pip一样从网络安装Python包,也可以安装pip。但conda的国内镜像更新比较慢,很多包的版本比较老,且包的覆盖面也没有pip广,因此笔者安装Python包还是用pip,只是用conda的虚拟环境来隔离不同项目的环境。
关于conda的安装,推荐直接下载安装Anaconda,安装方式可参考网络上其他博客。以下假设读者已经正确安装conda并设置了环境变量。笔者的环境如下:

一、创建conda虚拟环境

用下面的命令创建名为test_env的conda虚拟环境

conda create -n test_env

conda env list --查看环境列表

使用下面的命令进入虚拟环境

conda activate test_env  -- 创建虚拟环境

退出虚拟环境

conda deactivate

全局pip
进入test_env虚拟环境后,执行命令which pip(linux) / where pip(win 系统),可以看到当前pip的路径/home/ U S E R N A M E / a n a c o n d a 3 / b i n / p i p ( {USER_NAME}/anaconda3/bin/pip( USERNAME/anaconda3/bin/pip{USER_NAME}是系统用户名)仍然是全局pip的路径,这意味着此时在虚拟环境中使用pip install的方式安装的包,仍会被安装到全局环境下,对全局环境和当前虚拟环境都有效,这是笔者不期望的,因为这样并没有起到环境隔离的作用。
为了验证上面的结论,在虚拟环境中用全局pip安装1.11版本networkx作为测试。

pip install networkx==1.11

安装完成后,在虚拟环境中执行pip list|grep networkx,显示networkx 1.11
conda deactivate退出虚拟环境在全局环境中执行pip list|grep networkx,也显示networkx 1.11

二、在虚拟环境中安装pip

为了让pip安装的包只对虚拟环境升效从而实现环境隔离,需要在虚拟环境中用conda先安装虚拟环境内的pip,再用虚拟环境内的pip安装其他Python包。source activate test_env进入test_env虚拟环境后,用下面的命令安装虚拟环境中的pip

conda install pip

此时再执行which pip,显示的当前pip路径为/home/ U S E R N A M E / a n a c o n d a 3 / e n v s / {USER_NAME}/anaconda3/envs/ USERNAME/anaconda3/envs/{ENV_NAME}/bin/pip( U S E R N A M E 是系统用户名, {USER_NAME}是系统用户名, USERNAME是系统用户名,{ENV_NAME}是conda虚拟环境名),此后执行的pip install都是用的虚拟环境内的pip进行安装,比如我们安装一个2.4版本的networkx

pip install networkx==2.4

安装完成后,在虚拟环境中执行pip list|grep networkx,显示networkx 2.4
source deactivate退出虚拟环境在全局环境中执行pip list|grep networkx,仍显示networkx 1.11,至此,实现了pip安装的包在conda虚拟环境内的隔离。

相关推荐

  1. condapip隔离Python环境

    2024-03-29 22:02:01       46 阅读
  2. condapip命令整理

    2024-03-29 22:02:01       55 阅读
  3. Anaconda-conda创建python虚拟环境命令

    2024-03-29 22:02:01       31 阅读
  4. pipxconda

    2024-03-29 22:02:01       36 阅读
  5. 清理 Conda pip 缓存

    2024-03-29 22:02:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 22:02:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 22:02:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 22:02:01       87 阅读
  4. Python语言-面向对象

    2024-03-29 22:02:01       96 阅读

热门阅读

  1. 使用Shell脚本进行MySql权限修改

    2024-03-29 22:02:01       47 阅读
  2. 我的创作纪念日

    2024-03-29 22:02:01       41 阅读
  3. Leetcode 1143:最长公共子序列

    2024-03-29 22:02:01       46 阅读
  4. SQL注入攻击与防御详细讲解

    2024-03-29 22:02:01       42 阅读
  5. 服务器硬件基础知识

    2024-03-29 22:02:01       42 阅读
  6. 牛客的一道题(C)序列中删除指定数字

    2024-03-29 22:02:01       44 阅读