我用的是哪个python

我用的是哪个python

python版本

python2:目前主要是python2.7,已停止继续更新版本号
python3:目前主流python,建议学习并使用该版本

正在使用的是哪个python

linux系统下,有时我们安装了多个python,例如,系统自带的python包,自行安装的python2python3,包括安装anaconda时安装的python。有时候想升级python版本,发现安装了指定版本后,终端默认python版本依旧是之前的版本。
问题1:当我们在终端使用python时,用的是哪个python
问题2:如何使用指定的python
问题3:使用pip安装python第三方包之后,到底安装到哪里去了?

问题1

linux相对windows在安装包管理上存在明显区别是:windows对每个安装的软件,都需要注册,这样相同的软件就不可能在windows上安装两个不同的版本。而linux则没有这个限制,理论上在linux上安装100个python都是没有问题的。

那么既然如此,linux上是如何选择当前用的是哪个python呢?这里就涉及到一个linux系统基本的搜索可执行二进制(命令)的逻辑了。
1、首先在命令执行的当前文件夹下搜索。(并不会)
2、如果没有,那么安装系统变量PATH指定的路径进行搜索。

linux下可以用命令which 命令name得到命令所在的路径。但不一定是真实运行时的二进制所在的路径,例如 which python 仅根据PATH中的顺序查询python,但有可能真实使用的python并非which python给出的结果。相对而言type pythonwhich python 更准确。

为什么which python有时不准确呢?
因为linux bash使用内部哈希表来优化PATH查找(说白了就是有些情况下PATH有缓存,bash首先拿到的是缓存中的PATH,修改了PATH之后缓存并没有随之实时更新)。这就导致新安装一个python,之前的系统中已有python,虽然新安装python时同时修改了PATH,甚至将新python对应的路径放在PATH的头部,bash却不知道发生了什么,因为bash使用的PATH有缓存。所以bash继续使用旧python。这就导致which pythonPATH搜索到的路径并不一定是真实运行的python路径了。

当然,这个问题好解决,重启后就没有缓存了。
或者,运行该命令hash -d python,这将pythonbash的哈希表中删除,下次调用python时必定要搜索PATH,那就符合预期了。
再或者,运行hash -r以完全清除哈希表。

查询全部python所在的路径:whereis python

附:为啥which python不准确

问题2

有很多时候,我们就是想使用指定的python版本,然后安装指定的第三方库。然后不知道如何操作,一顿百度谷歌之后,发现没什么效果。问题在哪里呢?一定是没搞清楚原理啦。
系统默认安装的python常用路径/usr/bin/python
在这里插入图片描述
anacondapython所在路径~/anaconda3/bin/python
自行安装python的默认路径一般是/usr/local/lib/python
为了让自己清楚知道自己的python装到哪里去了,可以在安装时指定安装路径。
编译源码时加上./configure --prefix=/users/my/python就能将python安装到指定路径/users/my/python。然后在PATH的头部加上路径/users/my/python。解决掉PATH缓存问题,就可以达到目的了。

还有一种方式,有兴趣可以试试:update-alternatives多个python时可修改优先级

问题3

pippython的包管理工具,pip将包安装到哪个python目录下,取决于用的是哪个pip,用的是哪个pip和上面用的是哪个python道理相同。(easy_installget-pip.py都是python安装包的工具)

pip list 查看已安装的包名
pip show包名 就可以看到安装到哪了

安装在对应python的安装路径下的lib/site-packages中,见下图:
在这里插入图片描述pippython均位于python安装路径下的bin中,在该路径下使用pip list可查询出该python安装了哪些第三方库。
在这里插入图片描述

pip安装包时,根据名称从python第三方库管理平台查找指定包,如果查询到,则下载后安装。
还可以下载.whl包到本地后进行安装。
或者自己写的代码,使用pip install .进行安装。

实践了下,linux查找可执行命令时完全是按PATH来的,不会先搜索当前目录,除非PATH中配置了当前目录。当前目录下运行程序一般是 ./python 才行。这样明确指定了路径,未明确指定路径都是搜索PATH
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值