news 2026/11/3 9:13:23

【python虚拟环境管理【二】】【mac m3】使用conda管理python项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【python虚拟环境管理【二】】【mac m3】使用conda管理python项目

文章目录

  • 一. python包管理概述
    • 1. miniforge、Miniconda与Anaconda
    • 2. conda与pip的区别是什么?
    • 3. pip与conda配合使用
  • 二. 使用conda管理不同py环境
    • 1. 创建一个环境
      • 1.1. 利用Pycharm快速创建
      • 1.2. 手动创建
    • 2. 安装依赖
    • 3. 解决依赖冲突
  • 三. 命令合集
    • 1. conda
      • 1.1. 常用
      • 1.2. 环境管理
      • 1.3. 包管理
      • 1.4. pip生成requirements.txt
    • 2. 依赖没有在conda源内时,使用pip
    • 3. 下载安装项目依赖

一. python包管理概述

1. miniforge、Miniconda与Anaconda

Anaconda vs Miniconda


  • Anaconda 和 Miniconda 是一个公司的产品,商用是付费的,个人暂时免费;
  • Anaconda= Miniconda + more packages。
    Miniconda = Python + conda,安装最小的支持包,如openssl, ncurses…
    Anaconda = Python + conda + meta package 安装至少不低于400个常见的支持包,如curl, numpy, pandas…

Miniconda vs Miniforge


  • miniforge是由社区主导,用GitHub托管,完全免费,使用 (而且只用)conda-forge 作为(默认)下载channel,避开了Anaconda的repository,从而也就避开了商业使用被Anaconda追责的问题。

  • Miniforge是由社区主导,用GitHub托管,完全免费。


channel的定义


conda channels (源) 是 packages 存储的位置,也即是你是从哪个来源下载这个包,对应到conda内部处理则是下载文件的链接。因为不同源会有相同名字的包,因此必须指定来源,同时安装conda的时候也会有一个默认的channel。目前主流的就是 conda-forge,齐全且更新快。如果有多个channel,他们会按顺序确定优先级,优先的源上找不到,就会到下一个优先级的源上去找。

还可以设置channel的优先级是否strict,如果是strict的话,则只会在这一个源上查找。

  • Miniforge 使用conda-forge 作为默认 channel
  • Miniconda 使用anaconda.org 作为默认channel。

MacOS上的支持


  • Miniforge 比 Anaconda、Miniconda 更早支持了Apple M1芯片。在苹果官方的Tensorflow加速训练教程中也是推荐的Miniforge。

  • Miniforge相比Anaconda更为灵活轻便,安装体积小、运行速度快、支持mamba、支持PyPy等。


2. conda与pip的区别是什么?

Conda 和 pip 都是 Python 的包管理工具,但它们有一些区别,主要体现在以下几个方面:

  1. 包管理范围:
  • pip:是 Python 的默认包管理器,主要用于安装和管理 Python 包(也称为模块或库),这些包通常发布在 Python Package Index(PyPI)上。
  • Conda:是一个跨平台的包管理器和环境管理器,不仅可以管理 Python 包,还可以管理任何语言的软件包。
  1. 环境管理:
  • pip:虽然可以安装和管理 Python 包,但本身并没有直接提供环境管理的功能。通常需要结合 virtualenv 或者 venv 等工具来创建和管理虚拟环境。
  • Conda:除了包管理外,还具有强大的环境管理功能。Conda 可以创建、导出、复制和删除环境,允许用户在不同的项目中使用不同版本的软件包及其依赖项。

总结

  • conda的优势:包之间严格的依赖检查;是一个超越Python的环境管理器,可以创建多个环境,环境之间互相隔离;
  • pip的优势:绝大多数包优先发布到pip上,安装方便,群众基础好。


如果需要多个python环境,最好使用conda,因为它可以做创建多个py虚拟环境,互不影响(不同的项目依赖的python 包版本不一致)。

3. pip与conda配合使用

pip不像conda一样,它不知道环境,我们首先要确保我们用的是本环境的pip,这样pip install时,包才会创建到本环境中。

用下面命令查看我们此时用的pip为哪个环境:

which-apip# macoswhereispip# pip: /Users/lianggao/miniforge3/envs/pp/bin/pip

当我们自己创建的conda环境里没有pip,此时进入自己的conda环境也会默认用base环境的pip,这就需要将pip安装入本环境。(尽量不要使用base的pip在其他环境装包,这样也会装在base环境中,有产生版本冲突的可能。)


在conda环境安装pip使用如下命令:

#(进入环境后)condainstallpip

用conda list查看此时python环境安装的包。

二. 使用conda管理不同py环境

1. 创建一个环境

1.1. 利用Pycharm快速创建

【Python虚拟环境】PyCharm虚拟环境配置:不同虚拟环境的配置策略

1.2. 手动创建

# 创建环境,conda create--namemyenvpython=3.8conda activate myenv python3--version

2. 安装依赖

安装包命令

## 安装包命令condainstallnumpy pandas matplotlib python3-mpipinstall... arch-arm64zsh

或者创建一个requirements.txt文件,来安装依赖

conda install --yes --file requirements.txt

3. 解决依赖冲突

The conflict is caused by: paddlepaddle2.6.1 depends on protobuf>=3.20.2;platform_system!="Windows"paddlepaddle2.6.0 depends on protobuf>=3.20.2;platform_system!="Windows"。。。 To fix this you could try to:1. loosen the range of package versions you've specified2. remove package versions to allow pip attempt to solve the dependency conflict ERROR: ResolutionImpossible:forhelpvisit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

放宽版本要求:

如果你的项目允许,可以尝试放宽对 protobuf 的版本要求。例如,将<=3.20.0, >=3.1.0改为>=3.1.0。这将让 pip 更有可能找到一个满足条件的版本,并解决依赖冲突。

python3-mpipinstall"protobuf>=3.20.2; platform_system != 'Windows'"

三. 命令合集

1. conda

1.1. 常用

conda create--namemyenvpython=3.8# 激活环境conda activate ppfast# 推出当前环境conda deactivate# 查看当前环境所依赖的包conda list# 激活conda 环境后pip命令就可以使用了。一般这样使用:python3-mpipinstallxxx# 修改conda的python版本condainstallpython=3.10# 查看拥有的环境conda info--envs

1.2. 环境管理

##创建环境conda create--nameyour_env_name##创建制定python版本的环境conda create--nameyour_env_namepython=2.7##创建包含某些包的环境conda create--nameyour_env_name numpy scipy##创建指定python版本下包含某些包的环境conda create--nameyour_env_namepython=3.5numpy scipy##列举当前所有环境conda info--envs## 列举当前环境下所有包condaenvlist## 进入某个环境activate your_env_name## 退出当前环境deactivate## 复制某个环境conda create--namenew_env_name--cloneold_env_name## 删除某个环境conda remove--nameyour_env_name--all

1.3. 包管理

# 列举当前活跃环境下的所有包conda list# 列举一个非当前活跃环境下的所有包conda list-nyour_env_name# 为指定环境安装某个包condainstall-nenv_name package_name

1.4. pip生成requirements.txt

# 生成requirements文件:不建议,生成较为混乱pip freeze>requirements.txt# 推荐# 先下载pipreqspipinstallpipreqs# 然后使用命令:覆盖生成pipreqs.--encoding=utf8--force

2. 依赖没有在conda源内时,使用pip

如果不能通过conda install来安装,可以直接用pip直接安装。

# 使用pip前查看#pip的安装目录是否是在当前环境下whereispip#pip安装项目依赖pipinstall-rrequirements.txt# 查看当前环境所依赖的包conda list# 升级包pipinstall--upgradekeras

3. 下载安装项目依赖

除了使用pip命令来安装requirement.txt依赖,也可以使用conda命令来安装。

conda install--yes--filerequirements.txt

如果conda下载不了,则使用pip下载

whileread requirement;do conda install--yes $requirement||pip install $requirement;done<requirements.txt

将依赖生成文件

# Export to .yml fileconda env export>freeze.yml# To reproduce:conda env create-f freeze.yml



参考:

https://stackoverflow.com/questions/35802939/install-only-available-packages-using-conda-install-yes-file-requirements-t

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 9:12:21

数据湖概述:大数据演进阶段-数据湖

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/3 9:10:49

【运维】hadoop3.0.3集群安装(一)多节点安装

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/3 9:10:06

【flink源码-1】【DataStream API】datastream程序各部分的作用、pipeline构建的意义、flink算子的内部结构有哪些之map源码分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/3 9:09:00

STM32G031K8与MAX14431隔离SPI设计:工业通信抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华