背景
由于自己系统中存在多个python解释器,直接在终端pip install也不知道自己把包装到哪里去了,在PyCharm终端下载也不知道下载到了哪里去,因此下定决心弄明白。
本文参考:
- 你的Python包都装到哪了?
- 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中默认环境下包的安装
通过图形界面安装
在IDE终端使用pip install
安装结果
默认环境的包会安装到哪里去?当前环境解释器的路径是/usr/local/bin/python3
,因此对应应当去寻找/usr/local/lib/python3.9/site-packages
。
可以看到我们在IDE的终端安装的pygments已经出现在了site-packages下。
系统终端的默认环境下安装包
在终端执行pip install pygments
,发现提示已经安装到了目标位置。
这是因为终端下的默认Python解释器优先级别最高的是homebrew安装的。下面给出的路径是可执行文件所在位置,不是/usr/local/python3
的symlink。
使用type
/which
查看当前python可执行环境的路径
type会给出shell变量的性质,如python is a hash/python is an alias等提示,并在括号内附有完整路径。
which会直接给出路径
使用sys内置库查看当前python可执行环境的路径
PyCharm中虚拟环境下包的安装
创建该项目的虚拟环境
打开Pregfrences,选中Project Interpreter,添加一个新的。
创建虚拟环境,就是在当前项目下所在目录下创建一个venv文件夹,里面包含lib
和bin
。bin
中存放指向python解释器的替身,lib
中存放标准库和第三方库。这个venv文件夹下的各个项目对于该项目而言,就和/user/local/lib
,/user/local/bin
对于系统终端运行的python脚本是一样的。
打开IDE终端下载库
可以看到终端中出现了(venv)
以及(base)
,前者代表已经进入了virtualenv,后者代表目前在anaconda的base环境。
系统终端的虚拟环境下安装包
在进入虚拟环境之前,使用which pip/type pip
查看一下当前pip绑定到那个路径下的解释器。
可以看到当前的pip还是和which python
匹配的路径。由此可以推断并验证,pip和python的解释器都是存在于同一个目录下的。
在终端执行source ~/PycharmProjects/qa_system/venv/bin/activate
,并在此使用pip install
就会发现下载到了~/PycharmProjects/qa_system/venv/lib
目录下。
这个时候再来查看一次which pip
,就能发现匹配到了项目的虚拟环境中。
终端输入deactivate
就能退出当前虚拟环境。
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
。
查看包所在位置
经常会遇到使用了pip install下载一个包,但是在脚本中使用import却报错找不到这个模块。这个时候需要使用pip show
显示包安装的位置,包所在位置的上层lib文件夹和脚本编译器所在的bin文件夹属于同一层级。
- 本文标题:关于python包的管理及查看
- 本文作者:徐徐
- 创建时间:2021-01-26 12:47:56
- 本文链接:https://machacroissant.github.io/2021/01/26/python-packages-install/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!