技术标签: python Python学习点滴 virtualenv conda Anaconda
目录
6. conda install vs pip install
6.4 如何判断conda中某个包是通过conda还是pip安装的?
Conda是Anaconda中一个强大的包和环境管理工具,可以在Windows的Anaconda Prompt命令行使用,也可以在macOS或者Linux系统的终端窗口(terminal window)的命令行使用。
本文简单介绍conda的一些常用命令(对于大多数人来说掌握了这些就基本上能够‘生活自理’了吧)命令。当然,本文假定你已经安装了Anaconda,并且在Windows条件下使用Anaconda Prompt或者在Linux下使用terminal window。
本文根据conda-getting-started编译而成,喜欢阅读英文的伙伴们可以直接去读英文说明。
conda命令的一些选项开关有两种指定方式,一种两个连接号“--”后跟选项名全程,一种是一个连接号“-”后跟简称。比如说"-n"和"--name"是等价的。但是要注意有些例外,比如说,“--version”对应的是“-V”(大写的V而不是小写的v)。
conda --version
conda config --show
运行结果示例(只是截取了最前面一小段)
conda有时候安装软件会非常慢。设置国内镜像的话可以使安装更快捷一些。设置方法如下所示:
#设置清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
#设置bioconda
conda config --add channels bioconda
conda config --add channels conda-forge
#设置搜索时显示通道地址
conda config --set show_channel_urls yes
将conda自身更新到最新版本,it is recommended to always keep conda updated to the latest version.
conda update conda
将整个Anaconda都更新到确保稳定性和兼容性的最新版本
conda update Anaconda
conda create --help
Conda允许你创建相互隔离的独立环境,这些环境被称之为虚拟环境
(Virtual Environment),这些环境各自包含属于自己的文件、包以及他们的依存关系,并且不会相互干扰。
Anaconda有一个缺省的名为base的环境。但是不建议把程序放在base环境中,应该创建不同的虚拟环境分别管理不同的开发项目。这个涉及到一个根本的问题:为什么我们需要虚拟环境呢?举一个简单的例子,想象一下你有多个项目要开发,每个项目中都有一些包要依赖于某个共同的包,但是各自的所需要的版本不一致,有一些需要低版本的,有些需要高版本的。然后你就陷入了众口难调的困境。为不同的项目创建虚拟环境就可以把不同项目隔离开来,各自使用自己所需要的软件环境。
使用conda创建虚拟环境的命令格式为:
conda create -n env_name python=3.8
这表示创建python版本为3.8、名字为env_name的虚拟环境。
创建后,env_name文件可以在Anaconda安装目录envs文件下找到。在不指定python版本时,自动创建基于最新python版本的虚拟环境.
但是并不建议这样做,简化每一条命令的任务在绝大多数时候都是明智的(一个例外是需要反复执行的脚本)
conda create -n env_name numpy matplotlib python=3.8
以下三条命令都可以。注意最后一个是”--”,而不是“-”.
conda env list
conda info -e
conda info --envs
所显示的列表中,前面带星号“*“的表示当前活动环境。比如说当前我的环境列表:
星号的位置表示我现在在base环境下工作。注意,也有不是显示base而显示root的,root是因为是以系统管理身份作业(?待确认)
使用如下命令即可激活创建的虚拟环境。
conda activate env_name
此时使用python --version可以检查当前python版本是否为所想要的(即虚拟环境的python版本)。
在4.6版本以前需要使用如下命令:
Linux: source activate your_env_name
Windows: activate your_env_name
但是为什么要停留在过去(4.6以前的版本)呢?毕竟现在至少已经有4.10版本了,所以如果你不是最新版本,运行一下"conda update conda"吧
使用如下命令即可退出当前工作的虚拟环境。
conda activate
conda deactivate
有意思的是,以上两条命令只中任一条都会让你回到base environment,它们从不同的角度出发到达了同一个目的地。可以这样理解,activate的缺省值是base,deactivate的缺省值是当前环境,因此它们最终的结果都是回到base
这个只适用于4.6及以后版本。如果你还在4.6以前的话,参见上一条说明。
执行以下命令可以将该指定虚拟环境及其中所安装的包都删除。
conda remove --name env_name --all
如果只删除虚拟环境中的某个或者某些包则是:
conda remove --name env_name package_name
很多的软件依赖特定的环境,我们可以导出环境,这样方便自己在需要时恢复环境,也可以提供给别人用于创建完全相同的环境。
#获得环境中的所有配置
conda env export --name myenv > myenv.yml
#重新还原环境
conda env create -f myenv.yml
查询看当前环境中安装了哪些包
conda list
查询当前Anaconda repository中是否有你想要安装的包
conda search package_name
当然与互联网的连接是执行这个查询操作乃至后续安装的前提条件.
(2023-08-17 added)
用conda list后跟package名来查找某个指定的包是否已安装,而且支持*通配模糊查找。
conda list pkgname
conda list pkgname*
如下所示:
当然如果你确认是否有某个包的目的是要对其进行更新的话,那就直接执行conda update pkgname即可,如果该包没有安装的话,conda会报告PackageNotInstalledError错误(然后改用conda install即可),比如:
在当前(虚拟)环境中安装一个包:
conda install package_name
当然也可以如上所述在创建虚拟环境的同时安装包,但是并不建议。安装完一个包后可以执行conda list确认现在列表中是否已经包含了新安装的包。
也可以以以下命令安装某个特定版本的包(以下例为安装0.20.3版本的numpy):
conda install numpy=0.20.3
可以用以下命令将某个包更新到它的最新版本 :
conda update numpy
安装包的时候可以指定从哪个channel进行安装,比如说,以下命令表示不是从缺省通道,而是从conda_forge安装某个包。
conda install pkg_name -c conda_forge
conda uninstall package_name
这样会将依赖于这个包的所有其它包也同时卸载。
如果不想删除依赖其当前要删除的包的其他包:
conda uninstall package_name --force
但是并不建议用这种方式卸载,因为这样会使得你的环境支离破碎,如以下(conda manual description原文)所述:
一个直观的理解就是,如果一个包A被删除了,而依赖于它的包B、C等却没有删除,但是那些包其实也已经不可用了。另一方面,之后你又安装了A的新版本,而不幸的是,B、C却与新版本的A不兼容因此依然是不可用的。
conda clean -p # 删除没有用的包 --packages
conda clean -t # 删除tar打包 --tarballs
conda clean -y -all # 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包)
关于清除命令的更详细的说明,可以执行以下命令进行查询:
>>conda clean -h
输出结果如下(一部分):
[2023-05-07]
conda就像个守财奴一样,把每个历史安装包都会好好保存。。。好处是可以很方便地恢复到旧的历史版本,坏处是占内存空间。。。前两天由于安装一个新的包,系统报告“CondaMemoryError: The conda process ran out of memory. Increase system memory and/or try again.”,执行"conda -y -all"清除了约30G的空间!
除了上面在创建虚环境时可以指定python版本外,Anaconda基环境的python版本也可以根据需要进行更改。
conda install python=3.5
更新完后可以用以下命令查看变更是否符合预期。
python --version
如果你想将python版本更新到最新版本,可以使用以下命令:
conda update python
比如说,在某个环境中安装一个包,会出现以下打印信息:
这里“Using cached jupyter ...” 的意思就是jupyter安装包已经(在base环境或者别的环境中)之前安装过了,在缓存中有安装包,所以就不会重新下载,而是直接利用了。
pip和conda在安装软件包时,在依赖关系方面的处理机制不同。pip在递归的串行循环中安装依赖项,不会确保同时满足所有软件包的依赖关系,如果按顺序较早安装的软件包相对于按顺序较晚安装的软件包具有不兼容的依赖项版本,则可能导致环境以微妙的方式被破坏掉;conda使用SAT(satisfiability)solver来验证是否满足环境中安装的所有软件包的所有要求,只要有关依赖项的软件包元数据正确,conda就会按预期产生可用的环境。
首先,不建议混用。混用容易导致库的依赖关系出现混乱,然后突然哪天环境可能就崩了,安装不了新的包,无法进行conda update之类的。[2023-05-07]刚刚这两天遭遇了一次这样的事件,由于要安装一个新的包,各种各样的稀奇古怪的事情层出不穷,比如说:
>> conda install packagename
....
CondaMemoryError: The conda process ran out of memory. Increase system memory and/or try again.
>> conda update conda
- defaults/win-64::_anaconda_depends==2020.07=py38_0
- defaults/win-64::_ipyw_jlab_nb_ext_conf==0.1.0=py38_0
failed with repodata from current_repodata.json, will retry with next repodata source.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata
source.
Collecting package metadata (repodata.json): failed
RemoveError: 'requests' is a dependency of conda and cannot be removed from
conda's operating environment.
上天入地各种官方民间偏方的试,搞不定,最后只好卸载重新安装Anaconda完事。。。
其次,由于conda的库确实不如pip的库丰富{很多包只在 pip
有:PYPI有15万可用包,而Anaconda repository中(使用conda命令安装)提供了1,500多个软件包,Anaconda cloud上(使用conda-forge或bioconda命令安装)的几千种其他软件包。},所以有时候可能迫不得已要使用pip安装。切记,只有在conda install搞不定时才使用pip intall。 而且,最后使用虚拟环境进行环境隔离。
anaconda3/pkgs
目录下,这样的好处就是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载。anaconda3/envs/current_env/lib/python3.x/site-packages
文件夹中,如果当前conda环境用的是系统的python,那么xxx会通常会被安装到~/.local/lib/python3.x/site-packages
文件夹中 执行 conda list
,用pip安装的包显示的build项目为pypi。如下图所示:
conda的配置文件为".condarc",该文件在安装时不是缺省存在的。但是当你第一次运行conda config命令时它就被自动创建了。".condarc"配置文件遵循简单的YAML语法。
执行conda info,会有信息显示如下所示:
追加conda-forge channel:
conda config --add channels conda-forge
移除conda-forge channel:
conda config --remove channels conda-forge
查询当前配置中包含哪些channels
conda config --get channels
Ref1:Conda:误解与迷思
文章浏览阅读5.8k次。在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理。今天我们的大数据入门分享,就主要来讲讲,Hive应用场景。关于Hive,首先需要明确的一点就是,Hive并非数据库,Hive所提供的数据存储、查询和分析功能,本质上来说,并非传统数据库所提供的存储、查询、分析功能。Hive..._hive应用场景
文章浏览阅读496次。Zblog是由Zblog开发团队开发的一款小巧而强大的基于Asp和PHP平台的开源程序,但是插件市场上的Zblog采集插件,没有一款能打的,要么就是没有SEO文章内容处理,要么就是功能单一。很少有适合SEO站长的Zblog采集。人们都知道Zblog采集接口都是对Zblog采集不熟悉的人做的,很多人采取模拟登陆的方法进行发布文章,也有很多人直接操作数据库发布文章,然而这些都或多或少的产生各种问题,发布速度慢、文章内容未经严格过滤,导致安全性问题、不能发Tag、不能自动创建分类等。但是使用Zblog采._zblog 网页采集插件
文章浏览阅读2.4k次,点赞2次,收藏2次。restUI页面提交1.1 添加上传jar包1.2 提交任务job1.3 查看提交的任务2. 命令行提交./flink-1.9.3/bin/flink run -c com.qu.wc.StreamWordCount -p 2 FlinkTutorial-1.0-SNAPSHOT.jar3. 命令行查看正在运行的job./flink-1.9.3/bin/flink list4. 命令行查看所有job./flink-1.9.3/bin/flink list --all._flink定时运行job
文章浏览阅读1k次,点赞2次,收藏6次。这个项目是基于STM32的LED闪烁项目,主要目的是让学习者熟悉STM32的基本操作和编程方法。在这个项目中,我们将使用STM32作为控制器,通过对GPIO口的控制实现LED灯的闪烁。这个STM32 LED闪烁的项目是一个非常简单的入门项目,但它可以帮助学习者熟悉STM32的编程方法和GPIO口的使用。在这个项目中,我们通过对GPIO口的控制实现了LED灯的闪烁。LED闪烁是STM32入门课程的基础操作之一,它旨在教学生如何使用STM32开发板控制LED灯的闪烁。_嵌入式stm32闪烁led实验总结
文章浏览阅读63次。本文介绍了安装和部署Debezium的详细步骤,并演示了如何将Debezium服务托管到systemctl以进行方便的管理。本文将详细介绍如何安装和部署Debezium,并将其服务托管到systemctl。解压缩后,将得到一个名为"debezium"的目录,其中包含Debezium的二进制文件和其他必要的资源。注意替换"ExecStart"中的"/path/to/debezium"为实际的Debezium目录路径。接下来,需要下载Debezium的压缩包,并将其解压到所需的目录。
文章浏览阅读4.4k次。需求:在诗词曲文项目中,诗词整篇朗读的时候,文章没有读完会因为屏幕熄灭停止朗读。要求:在文章没有朗读完毕之前屏幕常亮,读完以后屏幕常亮关闭;1.权限配置:设置电源管理的权限。
文章浏览阅读2.3k次。目标检测简介、评估标准、经典算法_目标检测
文章浏览阅读6.3k次,点赞4次,收藏9次。实训时需要安装SQL server2008 R所以我上网上找了一个.exe 的安装包链接:https://pan.baidu.com/s/1_FkhB8XJy3Js_rFADhdtmA提取码:ztki注:解压后1.04G安装时Microsoft需下载.NET,更新安装后会自动安装如下:点击第一个傻瓜式安装,唯一注意的是在修改路径的时候如下不可修改:到安装实例的时候就可以修改啦数据..._sqlserver 127 0 01 无法连接
文章浏览阅读7.4k次。1. Object.keys(item); 获取到了key之后就可以遍历的时候直接使用这个进行遍历所有的key跟valuevar infoItem={ name:'xiaowu', age:'18',}//的出来的keys就是[name,age]var keys=Object.keys(infoItem);2. 通常用于以下实力中 <div *ngFor="let item of keys"> <div>{{item}}.._js 遍历对象的key
文章浏览阅读2.2w次,点赞51次,收藏310次。粒子群算法求解路径规划路径规划问题描述 给定环境信息,如果该环境内有障碍物,寻求起始点到目标点的最短路径, 并且路径不能与障碍物相交,如图 1.1.1 所示。1.2 粒子群算法求解1.2.1 求解思路 粒子群优化算法(PSO),粒子群中的每一个粒子都代表一个问题的可能解, 通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。 在路径规划中,我们将每一条路径规划为一个粒子,每个粒子群群有 n 个粒 子,即有 n 条路径,同时,每个粒子又有 m 个染色体,即中间过渡点的_粒子群算法路径规划
文章浏览阅读353次。所谓稳健的评估指标,是指在评估的过程中数据的轻微变化并不会显著的影响一个统计指标。而不稳健的评估指标则相反,在对交易系统进行回测时,参数值的轻微变化会带来不稳健指标的大幅变化。对于不稳健的评估指标,任何对数据有影响的因素都会对测试结果产生过大的影响,这很容易导致数据过拟合。_rar 海龟
文章浏览阅读607次,点赞2次,收藏7次。–基于STM32F103ZET6的UART通讯实现一、什么是IAP,为什么要IAPIAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给_value line devices connectivity line devices