关于python包的管理及查看
徐徐 抱歉选手

背景

由于自己系统中存在多个python解释器,直接在终端pip install也不知道自己把包装到哪里去了,在PyCharm终端下载也不知道下载到了哪里去,因此下定决心弄明白。

本文参考:

  1. 你的Python包都装到哪了?
  2. Python Tutorial: How to Set the Path and Switch Between Different Versions/Executables (Mac & Linux)

Python如何找包

想要弄明白Python解释器如何找包,首先要弄清楚Python解释器在哪个位置。

以自己使用homebrew安装的python@3.9为例子,路径是/usr/local/bin/python3,这是python解释器所在的位置(注意这里都是替身,symlink,实际可执行文件的位置在/usr/local/Cellar下)。

这里的/usr/local是可替换的path_prefix,根据操作系统不同或者安装方式不同会有所变化。如果是macOS自带的python,路径就是/usr/bin/python

当在python环境下用解释器执行脚本是,会寻找以下三个位置:

  • <path_prefix>/lib(标准库路径)
  • <path_prefix>/lib/pythonX.Y/site-packages(第三方库路径,X.Y 是对应 Python 的主次版本号,如 3.7, 2.6)
  • 当前工作目录(pwd命令的返回结果)

需要注意的是,不同次版本好的Python的第三方库路径不同,如果你把 Python 从 3.6 升级到 3.7 那么之前装的三方库都没法用了。

PyCharm中默认环境下包的安装

通过图形界面安装

image-20210126134757475

在IDE终端使用pip install

image-20210126134842076

安装结果

默认环境的包会安装到哪里去?当前环境解释器的路径是/usr/local/bin/python3,因此对应应当去寻找/usr/local/lib/python3.9/site-packages

image-20210126143849472

可以看到我们在IDE的终端安装的pygments已经出现在了site-packages下。

系统终端的默认环境下安装包

在终端执行pip install pygments,发现提示已经安装到了目标位置。

image-20210126145826143

这是因为终端下的默认Python解释器优先级别最高的是homebrew安装的。下面给出的路径是可执行文件所在位置,不是/usr/local/python3的symlink。

image-20210126184118431

使用type/which查看当前python可执行环境的路径

type会给出shell变量的性质,如python is a hash/python is an alias等提示,并在括号内附有完整路径。

which会直接给出路径

使用sys内置库查看当前python可执行环境的路径

image-20210126222413950

PyCharm中虚拟环境下包的安装

创建该项目的虚拟环境

打开Pregfrences,选中Project Interpreter,添加一个新的。

image-20210126185020759

创建虚拟环境,就是在当前项目下所在目录下创建一个venv文件夹,里面包含libbinbin中存放指向python解释器的替身,lib中存放标准库和第三方库。这个venv文件夹下的各个项目对于该项目而言,就和/user/local/lib/user/local/bin对于系统终端运行的python脚本是一样的。

打开IDE终端下载库

可以看到终端中出现了(venv)以及(base),前者代表已经进入了virtualenv,后者代表目前在anaconda的base环境。

image-20210126185804967

image-20210126185820798

系统终端的虚拟环境下安装包

在进入虚拟环境之前,使用which pip/type pip查看一下当前pip绑定到那个路径下的解释器。

image-20210126190643773

可以看到当前的pip还是和which python匹配的路径。由此可以推断并验证,pip和python的解释器都是存在于同一个目录下的。

在终端执行source ~/PycharmProjects/qa_system/venv/bin/activate,并在此使用pip install就会发现下载到了~/PycharmProjects/qa_system/venv/lib目录下。

image-20210126190902308

这个时候再来查看一次which pip,就能发现匹配到了项目的虚拟环境中。

image-20210126191050036

终端输入deactivate就能退出当前虚拟环境。

image-20210126191259532

pip使用

如果使用官方源下载包,会重复输入命令pip install,然后就会报错THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE。解决办法pip install package-name --no-cache-dir。当然,还是换源更快。

下载慢换源

和npm官方源一样,pip的官方源从国内链接也是特别慢,所以要换成国内源。

终端输入pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

image-20210126191740512

查看包所在位置

经常会遇到使用了pip install下载一个包,但是在脚本中使用import却报错找不到这个模块。这个时候需要使用pip show显示包安装的位置,包所在位置的上层lib文件夹和脚本编译器所在的bin文件夹属于同一层级。

image-20210126221750420

  • 本文标题:关于python包的管理及查看
  • 本文作者:徐徐
  • 创建时间:2021-01-26 12:47:56
  • 本文链接:https://machacroissant.github.io/2021/01/26/python-packages-install/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论