Python 虚拟环境管理——conda

随着项目越做越多,越来越感受到Python的环境管理是多么重要。为每个项目创建一个独立的虚拟环境,不仅可以避免大杂烩般的库的依赖冲突,而且方便导出库依赖文件 environment.yml,提供项目开发时的库的信息。这对后来者对项目的复现,以及项目的远程部署,都有着重要的意义。

理清 conda, miniconda, anaconda 的区别和联系:

Anaconda:一个完整的数据科学发行版,包括了大量的科学计算、数据分析、机器学习等常用库和工具,以及一个基于 GUI 的环境管理器 Anaconda Navigator。Anaconda 包含了 1000 多个包,并且包含了软件包管理系统 conda。
Miniconda:是一个轻量级的 Anaconda 版本,只包含了 conda、Python 和一些必要的库和工具。
Conda:是一个跨平台的包管理器和环境管理器。Conda 与 pip 不同,它可以管理非 Python 的软件包,同时也能够管理 Python 版本。Conda 可以单独安装,也可以作为 Anaconda 和 Miniconda 的一部分。

在这里插入图片描述


备份

  • 先激活名为EnvName的虚拟环境:
conda activate EnvName
  • 利用conda将当前虚拟环境的信息备份,它将会导出environment.yml文件到指定路径MyPath。:
conda env export > MyPath/environment.yml

部署

  • 执行以下命令会新建一个虚拟环境,并安装所需依赖:
conda env create -f MyPath/environment.yml
  • 默认情况下,conda会使用environment.yml包含的环境名,如果要自己指定,可以用-n选项:
conda env create -f MyPath/environment.yml -n new_env_name
  • 列出该环境中安装的库以及对应版本:
pip list
  • 列出所有的虚拟环境:
conda env list
  • 删除conda环境:
conda env remove -n ENV_NAME

Channels

使用 conda 安装包时,常常需要通过 -c 参数指定 channels。那么什么是 channels?

Conda channels are the locations where packages are stored. They serve as the base for hosting and managing packages. Conda packages are downloaded from remote channels, which are URLs to directories containing conda packages. The conda command searches a set of channels. By default, packages are automatically downloaded and updated from the default channel, which may require a paid license, as described in the repository terms of service. The conda-forge channel is free for all to use. You can modify which remote channels are automatically searched; this feature is beneficial when maintaining a private or internal channel.

简单来说,channels 就是存放 package 的地方,和 Linux 中的镜像源有点像。Channels 有很多,我们可以在安装 package 的时候指定,这样 conda 就会在特定的位置寻找 package。默认情况下,channel=default

conda-forge 是一个完全免费的、由许多人精心维护的 Channel,以保证其中最新版本的 package。指定 conda-forge 作为 channel:

conda install scipy --channel conda-forge

另外一个例子:

conda install pytorch pytorch-cuda=11.7 -c pytorch -c nvidia

安装 pytorch 时,这里指定了两个 channels:先在 pytorch 这个 channel 中寻找,然后在 nvidia 中寻找。如果都没有相应的包,最后在 default 中寻找。

在虚拟环境中管理 channel

在新版 conda (>=4.6.0) 中,变量 channel_priority 接受三个值:strict, flexible 以及 disabled

With strict channel priority, packages in lower priority channels are not considered if a package with the same name appears in a higher priority channel.

channel_priority=strict 时,不考虑版本,如果优先级高的 channel 包含了需要的 package,那么不会继续在后面 channel 中寻找;
channel_priority=flexible 时,conda 会根据某种规则,按照版本新旧、channel 优先级高低对等待安装的 package 进行排序,选择综合排名最高的 package 进行安装。排序规则详见 conda docs

The default value is ‘flexible’…Strict channel priority can dramatically speed up conda operations and also reduce package incompatibility problems. We recommend setting channel priority to “strict” when possible.

默认情况下,channel_priority=flexible,但 conda 官方建议 channel_priority=strict,它可以加速 package 的安装、减少不同 channels 间 package 不兼容的问题。

下面是 channel 优先级的管理:

conda activate my_env
conda config --add channels new_channel
conda config --prepend channels new_channel

--add 或者 --prepend 将新 channel 的优先级设为最高(添加到 channel list 最开头)。

conda config --append channels new_channel

--append 将新 channel 的优先级设为最低(添加到 channel list 最末尾)。


示例

以下一个 environment.yml 示例,只安装了一些基本的计算、作图的库。

name: my_env
channels:
  - defaults
dependencies:
  - python==3.9
  - numpy
  - conda-forge::nbsphinx
  - pandas
  - pip:
    - tensorflow-gpu==1.10.0
    - mlflow
    - click==6.7
    - scikit-learn
    - pillow
  • Remark 1: 为什么要在 dependencies 里附带 pip?

Not all Python packages are available as Conda packages. Some might only available through PyPI, or may be released there first. By including pip in the dependencies, that Python-specific package manager will be included. Listing packages below pip in the hierarchy, indicates that pip should be used to install those packages.

  • Remark 2conda-forge::nbsphinx 为 nbsphinx 这一个 package 指定 conda-forge 作为 channel,且不需要在 channels 中列出。

  • Remark 3:可以指定 nodefaults 作为 channel,禁止 conda 从 default channel 中寻找依赖 package

channels:
  - nodefaults
  - conda-forge

Jupyter

如果希望这个环境能用于 Jupyter Notebook,需要安装 ipykernel.

pip install ipykernel

在新的环境中安装新的 kernel。这里的 envname 是 kernel 的名字,可以是任意取名,但建议与环境名字保持一致:

ipython kernel install --user --name=envname

注意这里有个小坑:
默认安装的 pyzmq 的版本,可能与 jupyter_client 发生版本冲突,导致Failed to start the Kernel这种错误。见 StackOverFlow 上的讨论:Failed to start the Kernel - Jupyter in VS Code
此时应该重新安装 pyzmq

pip uninstall pyzmq
pip install pyzmq
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Anaconda中创建虚拟环境并指定Python版本,可以按照以下步骤进行操作: 1. 打开终端或Anaconda Prompt,并输入以下命令来创建虚拟环境: ``` conda create -n <虚拟环境名> python=<Python版本号> ``` 例如,要创建一个名为"myenv"的虚拟环境,并指定Python版本为3.7,可以使用以下命令: ``` conda create -n myenv python=3.7 ``` 2. 创建完成后,可以使用以下命令来激活虚拟环境: ``` conda activate <虚拟环境名> ``` 例如,要激活名为"myenv"的虚拟环境,可以使用以下命令: ``` conda activate myenv ``` 3. 在激活的虚拟环境中,你可以安装所需的包和库。例如,如果你想安装PyTorch和torchvision,可以使用以下命令: ``` conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch ``` 4. 当你完成工作后,可以使用以下命令退出虚拟环境: ``` conda deactivate ``` 这样,你就成功地创建了一个指定Python版本的虚拟环境,并可以在其中安装所需的包和库。 #### 引用[.reference_title] - *1* *2* *3* [Pycharm+Anaconda使用笔记——用Anaconda创建虚拟环境时不指定Python版本等](https://blog.csdn.net/qq_43478778/article/details/129465746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值