conda、pip、mamba、anaconda、miniconda、miniforge相互比较

本文指导初学者理解Python环境配置中的conda、pip、mamba、anaconda、miniconda和miniforge的区别与关系,包括它们的功能、优缺点及适用场景,有助于新手顺利搭建和管理Python开发环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学python的爱好者,都有一个共同的地方,就是安装环境总是安装不好,这个包安了卸,卸了装,总是装不好,不知道是什么原因。学习python的热情,大大降低,甚至都有不想学的念头。今天我们讲解conda、pip、mamba、anaconda、miniconda、miniforge相互之间比较和关系。

conda、pip、mamba、anaconda、miniconda、miniforge,都是与python的包管理有关的环境程序,搞清楚他们的关系非常重要。它可以让我们轻松建立我们的开发环境,轻松驾驭包的安装和管理。

Anaconda vs Miniconda vs Miniforge

他们的核心都是包含conda这一工具,来实现 python 环境(environment) 和 包(package) 管理的,(其实conda不仅仅可以用来管理python,很多语言R, Java, C都支持)。

  • Anaconda 和 Miniconda 是一个公司的产品,商用是付费的,个人暂时免费;
  • Miniforge是由社区主导,用GitHub托管,完全免费。
  • Miniconda 和 Miniforge 是差不多的产物,mini代表着轻量化,
  • Anaconda是完整版,就略显臃肿,里面包括spyder、Jupter Notebook、Ananconda navigator等程序环境。

Anaconda vs Miniconda

(老司机) Miniconda = Python + conda,安装最小的支持包,如openssl, ncurses...

(新司机) Anaconda = Python + conda + meta package ,如
Anaconda3-2022.05-Windows-x86_64,安装至少不低于400个常见的支持包,如curl, numpy, pandas...

也就是说,Anaconda = Miniconda + more packages。Anaconda 一般还包括一个图形界面spyder,主要是多了一些基本的包,常见的包,安装完后,一般就可以直接使用,很省事,不用再单独安装了,但也有一些可能一直用不到,占用了许多空间。Miniconda 可以按需求安装库,但也可以借助conda install anaconda手动实现anaconda一样的预安装包 pre-installed package。Anaconda是安装初期花费更多时间下载,Miniconda是后期花更多时间单独安装。主语用哪一个,就看个人爱好了。我都都在Anaconda环境下教学,如果有特殊的包环境,我就建立虚拟环境,占用空间,反正现在硬盘大小不是问题,也不是主要矛盾。

Miniconda vs Miniforge

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

另外:Miniforge 比 Anaconda、Miniconda 更早支持了Apple M1芯片。2022年5月6日Anaconda官方宣布原生支持了Apple M1版本。在苹果官方的Tensorflow加速训练教程中也是推荐的Miniforge。

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

Conda vs Pip

  • conda包管理的来源是anaconda.org,而pip的来源是 PyPI (Python Package Index)。
  • pip是专门针对python打包而成的,属于wheels or source distributions,需要compiler来安装;conda的包是二进制(conda packages are binaries),因此包含例如C语言写的库,同时也不需要compilers。
  • pip的没有严格的依赖冲突检查,而conda是会有严格的依赖冲突检查。

通常我们安装一个python包,直接用pip install <pkg-name> 就行,但如果我们想要多个python环境,也就需要用到virtualenv;同时如果这个包没有不是 Python packages,是用C语言写的;这时候就需要Conda登场了,它同时解决了以上所有问题。

言而总之,优先推荐的是用conda创建虚拟python环境,使用conda安装需要的包,尤其是需要一些其他运行环境模块的时候。如遇见在使用过程中包出现问题的时候,就卸载后,使用pip install进行在线安装,或者直接下载对应的whl包进行安装。如果遇见特殊编译的,可以根据开发者的说明使用conda进行安装。个人推荐优先conda install,不行再pip install

需要注意的是 pip 和 conda 安装包对象的名称可能是不一样的,这个要看官网的说明,例如conda --- pytorch,pip --- torch。

Conda vs Mamba

我在python编程实践:mamba加速神器,体验飞一般的感觉,已经做了解释,总结一下:

mamba是用于管理环境的 CLI 工具。相比于 conda,mamba 是用 c++重写了 conda 的部分功能,运行效率显著提高,可以进行并行的下载,使用 rpm 包管理工具中的 libsolv,可以更快的解决环境依赖问题。mamba 的使用也比较简单,首先使用 conda 安装 mamba,后面所有用到 conda 的地方,都可以使用 mamba 替换即可。

安装:conda install mamba -c conda-forge

mamba优点:

  • 自带多线程下载下载repository data和packages;
  • mamba使用​libsolv加速解决依赖关系​​ (安装过程中Solving environment:转圈圈的时间);
  • Mamba的核心部分是通过C++实现,以获得最大执行效率;
  • 最重要的是​​Mamba可与conda完美兼容,学习成本极小​​ (将conda执行命令中的conda换做mamba即可)。

总而言之:mamba可完全替换conda,提高包的管理的效率,和包安装的成功率。

最后,如果您喜欢我的文章,可以点个“关注”,成为铁粉后能第一时间收到文章推送。

### STM32CubeMX FreeRTOS CAN Queue Read Example #### 配置项目环境 为了实现基于FreeRTOS的CAN消息队列读取,在STM32CubeMX环境中需完成以下设置: - 使用STM32CubeMX创建新工程并选择目标MCU型号。 - 启用CAN外设支持,并通过RTE(Run-Time Environment)配置其参数,如波特率等。 - 添加对FreeRTOS的支持,这会自动引入必要的库文件初始化代码。 #### 初始化FreeRTOS与CAN模块 确保已正确设置了`FreeRTOSConfig.h`中的各项参数以适应应用需求[^1]。对于CAN通信部分,则要依据具体硬件平台调整相应的初始化函数调用,通常位于`main.c`或其他由开发者指定的位置。 ```c // main.c or other designated file #include "cmsis_os.h" #include "can.h" osThreadId canReceiveTaskHandle; osMessageQueueId canMsgQueue; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_CAN1_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_CAN1_Init(); osKernelInitialize(); // Initialize CMSIS-OS V2 RTX Kernel // Create the message queue capable of holding up to 10 messages. canMsgQueue = osMessageQueueNew(10, sizeof(CAN_RxHeaderTypeDef), NULL); // Start thread as specified. canReceiveTaskHandle = osThreadNew(can_receive_task, NULL, NULL); osKernelStart(); } ``` #### 创建接收任务处理程序 定义一个专门的任务用于监听来自CAN总线的数据包并通过预先建立的消息队列传递给其他组件进一步解析或响应。 ```c #define MSG_QUEUE_TIMEOUT (10) void can_receive_task(void *argument) { uint8_t rxData[8]; CAN_RxHeaderTypeDef RxHeader; while (true) { if(HAL_CAN_GetRxMessage(&hcan1,&RxHeader,rxData)==HAL_OK){ // Put received data into a queue for processing by another task. osMessageQueuePut(canMsgQueue, &RxHeader, 0, MSG_QUEUE_TIMEOUT); /* Process Data Here */ } osDelay(1); // Short delay between checks } } ``` 上述代码片段展示了如何利用FreeRTOS提供的APIs构建一个多线程应用程序框架下的CAN报文接收机制。每当接收到新的数据帧时即刻将其存入共享资源——消息队列之中等待后续操作;与此同时保持较低优先级循环执行以便让渡CPU时间片给更高紧迫性的作业单元[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值