不知道学过MATLAB或者R的小伙伴刚刚接触python的时候会不会被各种python版本,包版本,虚拟环境之类的搞的头晕眼花。
问题一 包版本
先来假设,我们自己开发了一个包MyPackage 1.0,里面包含一个模块叫PreTrained,然后去维护,每维护维护就更新一下包的版本。MyPackage2.0,甚至里面一些类的名称也有所变动,比如因为不同算法习惯的专业名词迭代更新,对应的包也会有所修改。如,我们把PreTrained 改名为PreTrainedML。
此时,用户小A,用1.0版本的包写了个程序。我们拿来扒一下,想学习,我们也直接安了MyPackage。
pip install MyPackage
from MyPackage import PreTrained
就会报错找不到对应module。因为等我们用的时候包已经更新成2.0版本了,直接安装最新的包,会找不到这个模块,因为它在新版本里改名了。
那么我们就可以安装包的时候指定一下版本。安装的时候在终端里进行,就像R一样,一般安装完之后都要导入一下才能用。install.package(), library(). (但R里我们不会反复安装某个包,python也是一样的)
pip install MyPackage==1.0
问题二 包环境
新问题来了,如果我们学习多个人的代码,发现他们的MyPackage版本都不太一样,一会这个用1.0,那个用的2.0. 我们要一直重新安装不同版本的包么?有小伙伴想,那我把这个包所有版本的包都安在一个环境里不就行了,但是一般包的版本是很多的,而且调用会很混乱。(PS,一般一个环境里不能安两个版本的包。)
那我们怎么办呢?去建立虚拟环境,什么是虚拟环境可以直接查一下,但是下面分享一下怎么理解
图片来源 https://www.11meigui.com/2023/python-venv.html
假设我们新建一个虚拟环境叫 Kaggle,就可以在里面安装对应的包版本,不用每次都重新安装包之类的。
怎么新建呢?我的计算机里面又都有哪些环境呢?那我这个环境怎么选呢?下面一一解释一下。
关于新建用的命令工具(pip/conda)
可以在计算机上用 pip 命令新建 见 https://zhuanlan.zhihu.com/p/60647332
也可以用anaconda帮我们新建和管理,下面主要举例如何用conda 命令新建,逻辑是一样的
插一句 conda和pip的作用和区别,可以理解二者都是安装xx包的命令
pip:是 Python 的官方软件包管理工具,用于安装和管理 Python 软件包。不太适用于其他语言。
conda: 是 Anaconda 软件(后续有讲)的一部分,用于管理软件环境和软件包。不仅仅是 Python 软件包,还包括 C、C++ 等其他语言的软件包。conda 可以创建和管理虚拟环境。
比如就像上述安装包时,也可以用conda
# 两行命令作用一样
pip install MyPackage==1.0
conda install MyPackage==1.0
下面回来继续说怎么新建虚拟环境
# 代码
conda create -n your_env_name python=x.x
# 实例 比如建立Kaggle虚拟环境
conda create -n Kaggle python=3.6
新建完了,我怎么看?我的计算机里面又都有哪些环境呢?
(Kaggle) ziqzha@psy-xxxx ~ % conda info --envs
怎么确认我现在的环境是那个?
安装包都是先选择环境,再进行安装。看红色方框,名字对应的就是所在环境。
更多见Anaconda-用conda创建python虚拟环境 https://zhuanlan.zhihu.com/p/94744929
问题三环境和python对应
问题又来了,行,我知道要有虚拟环境,可以安特定版本的包,在这个环境里直接跑代码就不会出现版本冲突。但是我怎么确定我打开的python用的能是这个环境呢?这个怎么对应调?
(对于习惯直接点击app图标打开代码的小伙伴,应该疑惑过),理解了要做什么就好调试了。
说几种方法,一个是从选择过环境的终端里打开,比如上述红色方框环境是(Kaggle),那么直接输入python,就是对应的。
(Kaggle) ziqzha@psy-xxxx ~ % python
二 Pycharm里怎么对应环境和脚本Script (就是py文件)
右下角 是环境名,可以看到我这里对应的就是 Kaggle环境,那么我当前的py文件运行直接就是在这个环境里。
修改对应的环境:
- 选择Interpreter setting ,这里可以看到当前环境我们安装了哪些包,以及对应的版本。
2. add interpreter: 会显示可以选择的环境,virtualenv 是我们自己手动在电脑上建立的虚拟环境。anaconda(conda Enviroment) 是一个可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。
三 anaconda 简单介绍一下
里面环境直接都给列出来了,在终端里选择什么环境,安装卸载包,这里对应都可以刷新出来
比如终端里
# 这行代码就表示,在kaggle环境里,卸载包 mypackage
(Kaggle) ziqzha ~% conda uninstall MyPackage
然后Anaconda软件里面,kaggle环境下这个包也没了,有时候发现还在,可能是因为没有刷新,我一般都是点其他环境(如点base(root)),再点回来(点击Kaggle)。(这也对应Jupyter notebook里的 kernel的选项,kernel对应的就是我们的环境。如果在终端进行了什么新操作(安装或卸载),有时候需要refresh kernel (刷新一下环境))。
可能存在错误,评论里欢迎指正