Featured image of post Python环境管理方式总结

Python环境管理方式总结

用venv/conda/mamba等工具管理Python环境

缘起

在使用Python开发时,遇到了很多配置环境的情形。有时需要安装不同版本的Python,有时需要安装不同的Python包,有时需要安装不同的Python包的不同版本。

最开始使用时我基本上都是看网上的教程,不同的Python项目可能使用不同的环境管理工具,不知不觉就用过了pipcondamambavirtualenvvenv等等。这些工具各有优劣,有时候我也会混用,导致环境变量混乱,有时候还会出现冲突。

由于一直没有什么一致性,导致电脑上的Python环境比较乱,我自己也感觉云里雾里的,所以我打算总结一下这些工具的使用方法,以及它们的优缺点。最后会给出我自己推荐的一些使用方法。

Python管理工具分类

Python管理工具可以分为两类:

  1. 包管理工具:用于安装、卸载、更新Python包,如pipcondamamba等。

  2. 环境管理工具:用于管理Python环境,如venvvirtualenvcondamamba等。

我们这里主要讨论环境管理工具,因为包管理工具的使用方法比较简单,而且大多数情况下我们都会使用pip,所以这里不再赘述。

之前我也写过一篇关于Linux下使用module管理软件包和环境变量的文章,可以参考“Linux下使用module管理软件包和环境变量”

环境管理工具

venv

venv是Python自带的环境管理工具,其使用起来是最简单,也是最不需要操心的。

使用方法

  1. 创建一个新的环境:

    1
    
    python -m venv .venv
    

    这样就会在当前目录下创建一个.venv的文件夹,里面包含了一个新的Python环境。当然,这里的.venv可以替换成任何你想要的名字,用.venv是因为这样可以创建一个自动隐藏的文件夹,在git中也很容易把它忽略掉。

    注意,这里的python是你想要创建环境的Python版本,如果你有多个Python版本,可以使用python3或者python3.10等。

  2. 激活这个环境:

    如果是Linux系统或者MacOS系统,可以使用如下命令:

    1
    
    source .venv/bin/activate
    

    如果是Windows系统,可以使用如下命令:

    1
    
    .venv\Scripts\activate
    
  3. 安装Python包:

    在激活环境之后,使用pip安装Python包会把包安装到这个环境中,而不是全局环境。安装的包会放在.venv/lib/python3.10/site-packages目录下。

    1
    
    pip install numpy
    
  4. 退出环境:

    在环境中使用deactivate命令可以退出环境。

    1
    
    deactivate
    

优缺点

  • 优点:

    • 原生工具,简单易用,不需要安装额外的软件。
    • 速度快,因为不需要下载额外的软件包。
    • 环境隔离,不会影响全局环境。
    • 可以在任何地方创建环境,不需要管理员权限。
    • 每个项目中的环境都在本项目目录下,与其他项目做到了物理隔离,不易弄混。
  • 缺点:

    • 每个项目都需要创建一个新的环境,如果有很多项目,会占用很多空间。
    • 无法共享环境,如果有多个项目使用同一个环境,需要重复创建。
    • 不好切换Python版本,每个环境都是一个Python版本,无法切换。
    • 只适用于Python 3.3及以上版本。

简单来说,如果你不在意空间占用,不需要切换Python版本,那么venv是一个很好的选择。

virtualenv

由于venv有很大的占用空间的问题,所以有人开发了virtualenv,它是一个第三方的环境管理工具,可以解决venv的一些问题。

virtualenv的使用方法和venv基本一样,只是需要安装virtualenv这个包。

使用方法

  1. 安装virtualenv

    1
    
    pip install virtualenv
    
  2. 创建一个新的环境:

    1
    
    virtualenv .venv
    

    如果你想指定Python版本,可以使用如下命令:

    1
    
    virtualenv -p python3.10 .venv
    
  3. 激活这个环境的方式和venv一样。

  4. 安装Python包的方式和venv一样。

但它和venv的区别在于,virtualenv会复用系统的Python库,不会重复安装,所以占用的空间会小很多。如果你不想复用系统的Python库,可以使用--no-site-packages选项,在本项目中安装全新的Python库。

  1. 退出环境的方式和venv一样。

优缺点

  • 优点:

    • 可以指定Python版本。
    • 可以共享环境,不需要重复创建。
    • 占用空间小,不会重复安装Python库。
    • 适用于Python 2.7及以上版本。
  • 缺点:

    • 非原生工具,需要安装额外的软件。

简单来说,如果你在意空间占用,且想要和venv相似的使用体验,那么virtualenv是一个很好的选择。

conda

conda是一个非常强大的环境管理工具,它不仅可以管理Python环境,还可以管理其他语言的环境,如R、Julia等。

conda、Anaconda、miniconda、mamba、micromamba之间的关系

  • conda是Anaconda的一部分,Anaconda是一个数据科学家常用的工具包,里面包含了很多数据科学家常用的软件包,如numpypandasscipy等。但有用户反映Anaconda安装的软件包太多,占用空间太大,所以有人开发了miniconda,它是Anaconda的精简版,只包含了conda和一些基本的软件包。

  • 不管是Anaconda还是miniconda,都是使用conda这个包管理工具来管理环境,但conda在安装软件包时是单线程的,速度比较慢,所以有人开发了mamba,它是conda的一个加速版,速度比conda快很多。

  • mambaconda的使用方法基本一样,只是在安装软件包时使用mamba代替conda。用户基本可以认为,mamba命令是conda命令的一个别名。

  • micromambamamba的一个精简版,micromambabase环境是空的,不包含任何软件包。

conda的原理(也适用于mamba)

  • conda环境管理工具会在用户的家目录下创建一个.conda文件夹,里面包含了所有的环境,每个环境都是一个文件夹,里面包含了一个Python环境和一个软件包列表。

  • 用户每创建一个新的环境,conda环境管理工具就会在.conda文件夹下创建一个新的文件夹,里面包含了一个新的Python环境和一个新的软件包列表。用户每安装一个新的软件包,conda包管理工具就会把这个软件包安装到对应的环境中。

  • 用户每激活一个环境,conda环境管理工具就会把这个环境的Python环境和软件包列表添加到环境变量中,用户每退出一个环境,conda环境管理工具就会把这个环境的Python环境和软件包列表从环境变量中删除。

  • 创建好的conda环境跟某个项目无关,用户可以在任何地方激活这个环境,不需要在项目目录下创建环境。

使用方法(以mamba为例)

  1. 安装conda或者mamba

    你可以在miniforge找到最小化的conda或者mamba安装包,下载安装即可。

  2. 创建一个新的环境:

    1
    
    mamba create -n myenv python=3.10
    

    这里的myenv是环境的名字,python=3.10是指定Python的版本。

  3. 激活这个环境:

    1
    
    mamaba activate myenv
    
  4. 安装Python包:

    1
    
    mamba install numpy
    
  5. 退出环境:

    1
    
    mamba deactivate
    

优缺点

  • 优点:

    • 可以指定Python版本。
    • 可以共享环境,不需要重复创建。
    • 可以安装其他语言的环境。
    • 速度快,因为有mamba这个加速版。
    • 可以在任何地方激活环境,不需要在项目目录下创建环境。
    • 可以共享软件包,不需要重复下载。
  • 缺点:

    • 非原生工具,需要安装额外的软件。
    • 环境跟具体项目是分离的,对于较久未使用的环境,可能会忘记这个环境是干什么的。对于较久未使用的项目,可能会忘记这个项目使用的是哪个环境。

简单来说,如果你想要一个强大的环境管理工具,而且想要安装包时速度快,那么conda或者mamba是一个很好的选择。但在开发某个项目时,最好标注一下这个项目使用的是哪个环境,以免忘记。

冻结环境

无论使用哪种环境管理工具,都可以使用pip freeze命令来冻结环境,即把当前环境的软件包列表保存到一个文件中。

1
pip freeze > requirements.txt

这样就会在当前目录下创建一个requirements.txt文件,里面包含了当前环境的软件包列表。当你需要在另一个环境中安装这些软件包时,可以使用如下命令:

1
pip install -r requirements.txt

这样就会安装requirements.txt文件中列出的所有软件包。

总结

  • 如果你不在意空间占用,适用高于3.3版本的Python,不需要切换Python版本,只想要一个最简单的环境管理工具,那么venv是一个很好的选择。
  • 如果你在意空间占用,想要共享环境,适用于2.7及以上版本的Python,那么virtualenv是一个很好的选择。
  • 如果你想要一个强大的环境管理工具,想要安装包时速度快,那么conda或者mamba是一个很好的选择。

推荐的使用方法

  • 如果你不在于空间占用,且可能用到很多科学计算的包,在你的主力开发电脑上,可以安装Anaconda
  • 如果你在意空间占用,只想在需要时安装包,可以在你的主力开发电脑上安装micromamba
  • 如果你不在意空间占用,在你的测试电脑上,或者在你的服务器上,可以使用venv
comments powered by Disqus