【python】使用conda管理python项目:conda管理不同项目环境,pip下载最新的包

news/2024/7/8 12:10:35 标签: python, conda, pip

文章目录

  • 一. python包管理概述
  • 二. 使用conda管理不同py环境
    • 1. 创建一个环境
    • 2. 解决冲突
  • 三. 命令合集
    • 1. conda
      • 1.1. 常用
      • 1.2. 环境管理
      • 1.3. conda分享环境与pip生成requirements.txt
      • 1.4. 包管理
    • 2. 依赖没有在conda源内时,使用pip
    • 3. 使用conda安装requirement.txt依赖

python_1">一. python包管理概述

condaAnaconda_3">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等。


 

condapip_67">2. condapip的区别是什么?

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 包版本不一致)。

 

pipconda_97">3. pipconda配合使用

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

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

which -a pip

# macos
whereis pip
# pip: /Users/lianggao/miniforge3/envs/pp/bin/pip

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

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

#(进入环境后)
conda install pip

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

 

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

1. 创建一个环境

# 创建环境,
conda create --name myenv python=3.8

conda activate myenv

python3 --version

## 安装包命令
conda install numpy pandas matplotlib

python3 -m pip install ...


arch -arm64 zsh

2. 解决冲突

The conflict is caused by:
    paddlepaddle 2.6.1 depends on protobuf>=3.20.2; platform_system != "Windows"
    paddlepaddle 2.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 specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit 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 -m  pip install "protobuf>=3.20.2; platform_system != 'Windows'"

 

三. 命令合集

conda_186">1. conda

1.1. 常用

conda create --name myenv python=3.8
# 激活环境
conda activate ppfast

# 推出当前环境
conda deactivate

# 查看当前环境所依赖的包
conda list

# 激活conda 环境后pip命令就可以使用了。一般这样使用:
python3 -m pip install xxx



# 修改condapython版本
conda install python=3.10

# 查看拥有的环境
conda info --envs

 

1.2. 环境管理


##创建环境
conda create --name your_env_name


##创建制定python版本的环境
conda create --name your_env_name python=2.7
conda create --name your_env_name python=3
conda create --name your_env_name python=3.5

##创建包含某些包的环境
conda create --name your_env_name numpy scipy

##创建指定python版本下包含某些包的环境
conda create --name your_env_name python=3.5 numpy scipy

##列举当前所有环境
conda info --envs
## 列举当前环境下所有包
conda env list

## 进入某个环境
activate your_env_name

## 退出当前环境
deactivate 

## 复制某个环境
conda create --name new_env_name --clone old_env_name 

## 删除某个环境
conda remove --name your_env_name --all


 

condapiprequirementstxt_254">1.3. conda分享环境与pip生成requirements.txt

通过分享你的 environment.yml 文件,别人就可以从该文件中创建与你一模一样的环境。

## 在当前环境生成一个environment.yml
conda env export > environment.yml

## 将该文件放在工作目录下,可以通过以下命令从该文件创建环境
conda env create -f environment.yml


# 生成requirements文件
pip freeze > requirements.txt

 

1.4. 包管理


# 列举当前活跃环境下的所有包
conda list

# 列举一个非当前活跃环境下的所有包
conda list -n your_env_name

# 为指定环境安装某个包
conda install -n env_name package_name

 

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

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

#pip安装项目依赖
python3 -m pip install -r requirements.txt

# 查看当前环境所依赖的包
conda list

 

condarequirementtxt_304">3. 使用conda安装requirement.txt依赖

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

python">conda install --yes --file requirements.txt

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

python">
while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt

 

将依赖生成文件

python"># Export to .yml file
conda 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


http://www.niftyadmin.cn/n/5537178.html

相关文章

基于单片机技术的按键扫描电路分析

摘 要&#xff1a; 单片机应用技术被广泛应用于各种智能控制系统中&#xff0c;是电子信息类专业学生必修的一门专业课。在单片机端口信息输入模块中&#xff0c;按键是主要元器件之一&#xff0c;笔者主要介绍矩阵键盘的电路设计及控制程序编写&#xff0c;分析了单片机端口连…

Static关键字的用法详解

Static关键字的用法详解 1、Static修饰内部类2、Static修饰方法3、Static修饰变量4、Static修饰代码块5、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程语言中&#xff0c;static是一个关键字&#xff0c;它可以用于多种上…

智慧生活新篇章,Vatee万腾平台领航前行

在21世纪的科技浪潮中&#xff0c;智慧生活已不再是一个遥远的梦想&#xff0c;而是正逐步成为我们日常生活的现实。从智能家居的温馨便捷&#xff0c;到智慧城市的高效运转&#xff0c;科技的每一次进步都在为我们的生活增添新的色彩。而在这场智慧生活的变革中&#xff0c;Va…

转型AI产品经理前需要搞懂的9个问题

笔者近10年来一直工作于AI领域技术和产品一线&#xff0c;今天分享9个大家普遍关注却少有人系统回答的问题。 1.下一个10年&#xff0c;AI产业在国内的发展和职业发展的机遇如何&#xff1f; 从四方面看&#xff1a; &#xff08;1&#xff09;技术角度&#xff1a;逐步成熟…

Spring源码十:BeanPostProcess

上一篇Spring源码九&#xff1a;BeanFactoryPostProcessor&#xff0c;我们看到ApplicationContext容器通过refresh方法中的postProcessBeanFactory方法和BeanFactoryPostProcessor类提供预留扩展点&#xff0c;他可以在Spring容器的层面对BeanFactroy或其他属性进行修改&#…

加速度传感器信号处理注意事项

1 传感器分类 对于压电式压力传感器而言&#xff0c;输出信号是最重要的选择标准之一。压电式压力传感器与电子电路相连&#xff0c;电子电路将传感器产生的电荷成比例转换为电压。 如果选用外部设备&#xff08;电荷放大器&#xff09;充当电子元件&#xff0c;则称其为电…

【vue】JSON数据导出excel

前言 导出方式有很多种&#xff0c;但是若只需要数据导出成.xlsx文件并下载的话&#xff0c;只用xlsx一个插件就行 目标 1 实现数据导出excel 2 如何设置表格列宽 3 如何在文件中创建工作表 准备工作 1 安装 npm i xlsx -S 2 引入 npm i xlsx -S 二、导出excel 创建文件 con…

如何计算弧线弹道的落地位置

1&#xff09;如何计算弧线弹道的落地位置 2&#xff09;Unity 2021 IL2CPP下使用Protobuf-net序列化报异常 3&#xff09;编译问题&#xff0c;用Mono可以&#xff0c;但用IL2CPP就报错 4&#xff09;Wwise的Bank在安卓上LoadBank之后&#xff0c;播放没有声音 这是第393篇UWA…