• 我用的是哪个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
    在这里插入图片描述

  • 相关阅读:
    JVM面试题:(二)内存结构和内存溢出、方法区的两种实现
    UniApp组件封装
    计算机毕业设计ssm校园竞赛管理系统设计与实现hyr9b系统+程序+源码+lw+远程部署
    《计算机视觉基础知识蓝皮书》第8篇 模型超参数调整策略
    七大排序之选择排序
    逆波兰表达式 (利用stl
    460. LFU 缓存
    TCP/IP网络江湖——江湖导航(网络层上篇)
    ASH是否可以生成备库的ASH
    Ansible 2.6 Pthon API
  • 原文地址:https://blog.csdn.net/u013095333/article/details/125418728