在使用Python开发时,遇到了很多配置环境的情形。有时需要安装不同版本的Python,有时需要安装不同的Python包,有时需要安装不同的Python包的不同版本。
最开始使用时我基本上都是看网上的教程,不同的Python项目可能使用不同的环境管理工具,不知不觉就用过了
pip
、
conda
、
mamba
、
virtualenv
、
venv
等等。这些工具各有优劣,有时候我也会混用,导致环境变量混乱,有时候还会出现冲突。
由于一直没有什么一致性,导致电脑上的Python环境比较乱,我自己也感觉云里雾里的,所以我打算总结一下这些工具的使用方法,以及它们的优缺点。最后会给出我自己推荐的一些使用方法。
Python管理工具分类
Python管理工具可以分为两类:
包管理工具
:用于安装、卸载、更新Python包,如
pip
、
conda
、
mamba
等。
环境管理工具
:用于管理Python环境,如
venv
、
virtualenv
、
conda
、
mamba
等。
我们这里主要讨论环境管理工具,因为包管理工具的使用方法比较简单,而且大多数情况下我们都会使用
pip
,所以这里不再赘述。
之前我也写过一篇关于Linux下使用
module
管理软件包和环境变量的文章,可以参考
“Linux下使用module管理软件包和环境变量”
环境管理工具
venv
是Python自带的环境管理工具,其使用起来是最简单,也是最不需要操心的。
创建一个新的环境:
python -m venv .venv
这样就会在当前目录下创建一个.venv
的文件夹,里面包含了一个新的Python环境。当然,这里的.venv
可以替换成任何你想要的名字,用.venv
是因为这样可以创建一个自动隐藏的文件夹,在git中也很容易把它忽略掉。
注意,这里的python
是你想要创建环境的Python版本,如果你有多个Python版本,可以使用python3
或者python3.10
等。
激活这个环境:
如果是Linux系统或者MacOS系统,可以使用如下命令:
source .venv/bin/activate
如果是Windows系统,可以使用如下命令:
.venv\Scripts\activate
安装Python包:
在激活环境之后,使用pip
安装Python包会把包安装到这个环境中,而不是全局环境。安装的包会放在.venv/lib/python3.10/site-packages
目录下。
pip install numpy
每个项目都需要创建一个新的环境,如果有很多项目,会占用很多空间。
无法共享环境,如果有多个项目使用同一个环境,需要重复创建。
不好切换Python版本,每个环境都是一个Python版本,无法切换。
只适用于Python 3.3及以上版本。
简单来说,如果你不在意空间占用,不需要切换Python版本,那么venv
是一个很好的选择。
virtualenv
由于venv
有很大的占用空间的问题,所以有人开发了virtualenv
,它是一个第三方的环境管理工具,可以解决venv
的一些问题。
virtualenv
的使用方法和venv
基本一样,只是需要安装virtualenv
这个包。
安装virtualenv
:
pip install virtualenv
但它和venv
的区别在于,virtualenv
会复用系统的Python库,不会重复安装,所以占用的空间会小很多。如果你不想复用系统的Python库,可以使用--no-site-packages
选项,在本项目中安装全新的Python库。
退出环境的方式和venv
一样。
可以指定Python版本。
可以共享环境,不需要重复创建。
占用空间小,不会重复安装Python库。
适用于Python 2.7及以上版本。
非原生工具,需要安装额外的软件。
简单来说,如果你在意空间占用,且想要和venv
相似的使用体验,那么virtualenv
是一个很好的选择。
conda
conda
是一个非常强大的环境管理工具,它不仅可以管理Python环境,还可以管理其他语言的环境,如R、Julia等。
conda、Anaconda、miniconda、mamba、micromamba之间的关系
conda
是Anaconda的一部分,Anaconda是一个数据科学家常用的工具包,里面包含了很多数据科学家常用的软件包,如numpy
、pandas
、scipy
等。但有用户反映Anaconda安装的软件包太多,占用空间太大,所以有人开发了miniconda
,它是Anaconda的精简版,只包含了conda
和一些基本的软件包。
不管是Anaconda还是miniconda,都是使用conda
这个包管理工具来管理环境,但conda
在安装软件包时是单线程的,速度比较慢,所以有人开发了mamba
,它是conda
的一个加速版,速度比conda
快很多。
mamba
和conda
的使用方法基本一样,只是在安装软件包时使用mamba
代替conda
。用户基本可以认为,mamba
命令是conda
命令的一个别名。
micromamba
是mamba
的一个精简版,micromamba
的base
环境是空的,不包含任何软件包。
conda的原理(也适用于mamba)
conda
环境管理工具会在用户的家目录下创建一个.conda
文件夹,里面包含了所有的环境,每个环境都是一个文件夹,里面包含了一个Python环境和一个软件包列表。
用户每创建一个新的环境,conda
环境管理工具就会在.conda
文件夹下创建一个新的文件夹,里面包含了一个新的Python环境和一个新的软件包列表。用户每安装一个新的软件包,conda
包管理工具就会把这个软件包安装到对应的环境中。
用户每激活一个环境,conda
环境管理工具就会把这个环境的Python环境和软件包列表添加到环境变量中,用户每退出一个环境,conda
环境管理工具就会把这个环境的Python环境和软件包列表从环境变量中删除。
创建好的conda
环境跟某个项目无关,用户可以在任何地方激活这个环境,不需要在项目目录下创建环境。
使用方法(以mamba
为例)
安装conda
或者mamba
:
你可以在miniforge
找到最小化的conda
或者mamba
安装包,下载安装即可。
创建一个新的环境:
mamba create -n myenv python=3.10
这里的myenv
是环境的名字,python=3.10
是指定Python的版本。
激活这个环境:
mamaba activate myenv
简单来说,如果你想要一个强大的环境管理工具,而且想要安装包时速度快,那么conda
或者mamba
是一个很好的选择。但在开发某个项目时,最好标注一下这个项目使用的是哪个环境,以免忘记。
无论使用哪种环境管理工具,都可以使用pip freeze
命令来冻结环境,即把当前环境的软件包列表保存到一个文件中。
pip freeze > requirements.txt
这样就会在当前目录下创建一个requirements.txt
文件,里面包含了当前环境的软件包列表。当你需要在另一个环境中安装这些软件包时,可以使用如下命令:
pip install -r requirements.txt
这样就会安装requirements.txt
文件中列出的所有软件包。
如果你不在意空间占用,适用高于3.3版本的Python,不需要切换Python版本,只想要一个最简单的环境管理工具,那么venv
是一个很好的选择。
如果你在意空间占用,想要共享环境,适用于2.7及以上版本的Python,那么virtualenv
是一个很好的选择。
如果你想要一个强大的环境管理工具,想要安装包时速度快,那么conda
或者mamba
是一个很好的选择。
推荐的使用方法
如果你不在于空间占用,且可能用到很多科学计算的包,在你的主力开发电脑上,可以安装Anaconda
。
如果你在意空间占用,只想在需要时安装包,可以在你的主力开发电脑上安装micromamba
。
如果你不在意空间占用,在你的测试电脑上,或者在你的服务器上,可以使用venv
。