使用conda快速初始化项目python

python的环境管理方案很多,社区有很多解决方案,本文介绍一种常用的、支持多版本python、多人协作的、方便快捷的环境管理方案:miniforge-conda

前言

进行项目的依赖管理,最根本的情况有以下几种:

  • 项目需要在不同机器上运行,如多人协作开发
  • 虽然项目只在同个机器运行,但该机器存在不同项目且存在不同的python版本要求

如果你开发的项目不具备以上情景,你可以暂时不考虑依赖管理的问题。但是从长远的角度来看,但凡你的项目有那么一丝可能出现以上情况,都应该思考如何考虑依赖管理的问题

工具选项

众所周知,python项目环境管理的工具比较多,比如大名鼎鼎的Anaconda或Miniconda,
如果你想使用conda来管理你的Python环境和依赖,你需要在你的机器上安装Anaconda或Miniconda。Anaconda包含了conda,Python和150+科学包及其依赖。而Miniconda只包含了conda和Python,可以参考[[python环境依赖管理方案]]

但是,由于Anaconda对于商业用户(大型实体、公司和一些研究机构)需要购买许可证,个人用户暂时免费,为了避免后续个人使用也收费需要再次切换,笔者现在已经切换到miniforge,两者都是使用conda作为包和环境管理工具,使用时命令几乎一样,能够做到无缝迁移

创建虚拟环境

创建虚拟环境的目的是为了在同一台计算机上同时管理和运行多个独立的Python项目。虚拟环境提供了一个隔离的运行环境,使得每个项目可以拥有自己独立的Python解释器和依赖库,而不会相互干扰。

以下是创建虚拟环境的几个主要目的:

  1. 隔离项目:每个项目都可以在自己的虚拟环境中运行,避免不同项目之间的依赖冲突。这样可以确保每个项目都能够独立地使用所需的特定Python版本和依赖库。
  2. 管理依赖:虚拟环境允许您为每个项目单独安装和管理所需的依赖库。这样可以确保每个项目都使用其特定版本的依赖库,而不会受其他项目的影响。
  3. 简化部署:使用虚拟环境可以更轻松地将项目部署到其他计算机或服务器上。您可以将虚拟环境与项目一起打包,并确保在不同环境中具有一致的运行结果。
  4. 提高可移植性:虚拟环境使得项目在不同操作系统和计算机上的移植更加容易。您可以在不同平台上创建相同的虚拟环境,并确保项目在各个环境中都能够正常运行。

创建虚拟环境可以提供一个独立、隔离和可管理的Python运行环境,使得多个项目能够在同一台计算机上同时运行,而不会相互干扰。这为项目开发、依赖管理和部署提供了更大的灵活性和可靠性

ps:在生成导出依赖项时,生成的记录文件类型一般是environment.yml或environment.txt,笔者这里是用的environment.txt

环境管理

1
2
3
4
5
6
7
# 创建新项目
mkdir test-python-project && cd test-python-project
# 选择你需要的python版本来创建虚拟环境
# conda create --name {envname} python={version}
conda create --name myenv python=3.10
# 激活虚拟环境
conda activate myenv

当创建好虚拟环境在切换到虚拟环境中进行工作后,你的pip和python命令应该指向,对应工具隔离的安装目录,可以使用以下方式查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd project/python-test

# 未安装miniforge之前或者未激活conda的环境之前,查看python和pip的执行目录
> which python
python: aliased to /usr/bin/python3

> which pip
python: aliased to /usr/bin/python3/pip

# 在项目中使用conda activate激活对应环境后
conda activate myenv

> which python
/Users/2ue/miniforge3/bin/python3

> which pip
/Users/2ue/miniforge3/bin/pip

可以看到在激活环境后,无论你执行python或者pip命令都是基于当前环境进行操作,所以不会影响机器上其他项目。

安装依赖

安装指定依赖

1
2
3
4
5
# 安装依赖: 假设安装request库
conda install request

# 如果安装失败,提示PackagesNotFoundError: The following packages are not available from current channels,则可以使用pip命令来安装相关包
pip install request

批量安装依赖

假设所有的依赖都已经存到requirements.txt(也有可能是requirements.yml等,根据项目具体配置)

1
2
3
4
5
# 安装依赖: 假设安装request库
conda install --file requirements.txt

# 如果安装失败,提示PackagesNotFoundError: The following packages are not available from current channels,则可以使用pip命令来安装相关包
pip install -r requirements.txt

导出依赖

为什么需要导出依赖呢?因为项目在可能会运行在其他地方,比如在不同的电脑上运行,比如和其他开发者协同开发,所以导出依赖的目的其实只有一个:保证项目在其他环境下能够正常运行。如果你项目依赖了几十个包,都分散在代码各处,要在其他机器上将这个项目运行起来,是多么的费事!所有我们必须有一个集中的地方将依赖管理起来,conda提供的一些常用的命令。

1
2
3
4
# 不带--name参数默认为当前项目已经激活的环境
conda env export > environment.txt
# 指定导出某个环境的依赖
conda env export --name myenv > environment.txt

协同开发

如果一个旧项目中存在environment.txt(或者其他配置文件),可以使用conda命令快速的创建一个独立的依赖环境

1
2
3
4
5
6
# 创建一个和项目完全一样的虚拟环境
conda env create --file environment.txt
# 安装依赖
conda install --file requirements.txt

# 当前同理,如果使用conda安装失败,也可以尝试使用pip命令进行安装

那么现在就可以愉快的编写代码了~