运行python的时候一定要注意当前运行所在环境位置,环境位置不同,包含的依赖包是不同的,然后不注意的话就是出很多莫名其妙的问题,比如一个pycharm里面不能运行的东西,命令行又能运行啥的
PIP使用的一些点:
-
pip安装包的时候加上后缀 --prefer-binary 不用最新的包,这样能避免很多包冲突安装不上的问题。
-
为什么anaconda环境中,还需要用pip安装包,anaconda本身只提供部分包,远没有pip提供的包多
-
在不同的conda环境中使用pip要注意pip是不是在当前环境中
查看pip安装位置的办法
pip show pip
pip所在位置就是安装位置了 对应的 site-packages 目录下
如果pip不在当前环境,需要先在当前环境安装
使用如下命令:
(进入环境后)
conda install pip
此时,正常使用pip安装就行了。
原因:
创建的conda环境里,也可能没有pip,此时用的是base环境的pip
pip不知道环境,pip在哪儿,包就安装到哪个环境,那么有可能会把包安装到base里面,结果出错产生版本冲突问题找半天你还不知道问题在哪儿
- 安装git的包
如果安装不上,那么下载,然后进入项目目录,然后使用pip install . 然后就能安装了
虚拟环境相关
https://sspai.com/post/75978
环境管理的的原因
conda的环境管理,环境管理主要用来应对一个包的不同版本之间的不兼容问题。
假如有一个项目P,它依赖a,b,c包,都是1.0的,然后然后a的开发者开发了2.0版本的a,出于某种原因我们更新了这个包(新的项目需要,或者某个包连带更新了它),但是2.0的a和1.0的a不兼容。也就是P不能按照原来的方式调用a,这时候就GG了,项目P不能跑了。
所以这种情况下,我们就很有必要为一个项目建立一个隔离的依赖环境了,也就是在这个环境中,依赖包版本是固定的,不被其他地方影响然后更新,遇到版本不兼容,项目不能跑的问题。
为什么不做版本兼容的包,这对开发者来说成本太高,因为Python开源,涉及到的整个环境太大了,涉及到的各种领域太多了,没有统一的控制,难以协调起来。不像Java,相对来说,整个体系控制比较严。这也是Python在服务器领域不好的原因吧,兼容性差,不稳定。
虚拟环境管理工具
目前有好多种虚拟环境管理工具
查了一下上述的管理工具,似乎没有一个具有明显的优势。
目前conda应该用的人最多,也用了一些时间了,所以还是只能选择这个。
pycharm导入anaconda的环境
file —setting ----project xxx—python interpreter
现在2023年2月18日的界面张这样,和以前不太一样了
然后选择conda的虚拟环境,其它也是环境管理工具,没有什么明显的优劣吧,这里选择conda的。
里面conda.exe注意选择Script下面的conda.exe
这里可以选择已经纯在的环境或者重新创建一个。
重新创建最好手动创建吧,在这里面创建都不知道位置在哪里。
conda的核心就是包管理和环境管理
不要用conda安装包,垃圾极慢
注意conda 是一个很垃圾的玩意儿,用的过程中你会遇到一些愚蠢的设计和东西,典型的,包多了根本无法通过它安装新包,直接resolve environment时卡死,咱是没办法才用它。
不能直接卸载conda 会删掉原来下载安装好的所有包
环境管理具体规则
由上面,知道了必须做环境隔离管理。那么具体怎么做呢。
创建环境
conda create -n env_name python=version pkg_name=version
python指明python的版本,不指名的话就用默认的版本
这个环境实在anaconda安装目录下面的,应该放在项目目录下更好
指定环境目录、位置
conda create --prefix=C:/ProgramData/Anaconda3/envs/xxx python=3.8
其中C:/ProgramData/Anaconda3/envs 是创建的目录所在位置;/xxx是所创建的环境的名称
指定了路径就不能同时指定名字,垃圾
删除环境
conda env remove -n env_name
激活环境
激活环境不能在cmd中用,需要在conda的命令行窗口中用,垃圾
conda activate env_name 或者 路径
conda activate envs
使用默认的pythonh环境,后面不加环境名字即可
conda activate
3). 退出环境
conda deactivate
source deactivate
查看已经安装的环境,会显示当前所在环境
conda info --envs
验证您当前环境中的 Python 版本:
python --version
导出环境配置
conda env_name export > environment.yml
拷贝环境
conda create -n B --clone A
克隆A到B中
清理环境中的安装包:
conda clean -a
环境管理更进一步的认知
激活环境之后,conda进行包管理,增删改查什么的,就只会在这个环境中生效。
运行python代码,代码用到的依赖就会先从这个环境中找,如果没找到,那么是没有了
环境管理能管理驱动吗,比如nvidia的驱动,应该是不能的
pycharm中配置conda环境
前面和windows一样,设置- 项目- python解释器-选中项目-右边Python解释器-最右边设置按钮-添加-选择conda环境-现有环境变量
后面不同的是选择的文件
默认conda环境
Conda Interpreter:Anaconda安装目录/bin/python
这里anaconda默认安装目录就是home下面的anaconda
自己建立的conda环境
Anaconda安装目录(如果指定了虚拟环境的安装路径则选择虚拟环境路径)/envs/虚拟环境名称/bin/python
包管理:
安装
conda install package_name=version
卸载:
conda remove package_names
更新包
conda update package_name=version
查看安装哪些包
conda list
渠道管理
这个决定你从哪个站点,下载及安装资源包
添加新渠道到顶部,最高优先级
conda config --add channels new_channel
或者conda config --prepend channels new_channel
添加新渠道到底部,最低优先级
conda config --append channels new_channel
conda和深度学习
有人说:根据他的经验,只要你显卡是最新的驱动,那么它可以同时支持好多的cuda版本,安装在不同环境中
源管理
首先翻墙用起来,就不用源了
参考https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
设置清华源,全局搜索或者打开用户目录下的.condarc 文件,设置如下内容进去
channels:
- defaults
show_channel_urls: true
default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
然后 运行 conda clean -i 清除索引缓存,保证用的是镜像站提供的索引。
使用的坑
python官方的版本,3.x 3.x.x conda里面可能没有,然后你用pip conda 可能都装不上 然后提示找不到包
其它
有时候一个包会莫名其妙找不到,试了采用不同的源,原始源都不行,不要再尝试了,用pip