进一步了解pip

在Python中,安装第三方模块,是通过包管理工具pip完成的。

模块的路径

当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错。
默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:

>>> import sys
>>> sys.path
[
    '/home/username/Downloads',
    '/home/username/anaconda3/lib/python38.zip',
    '/home/username/anaconda3/lib/python3.8',
    '/home/username/anaconda3/lib/python3.8/lib-dynload',
    '/home/username/anaconda3/lib/python3.8/site-packages',
]

如果我们要添加自己的搜索目录,有两种方法:

  • 直接修改sys.path,添加要搜索的目录:
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')

这种方法是在运行时修改,运行结束后失效。

  • 设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。
echo $PYTHONPATH
export PYTHONPATH=~/pyutil:"$PYTHONPATH"

注意此方法只在当前命令窗口生效,只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。
可以将此命令添加到~/.bashrc文件中,这样每次启动终端PYTHONPATH都已经被修改了。

指定安装目录

从Python2.6开始支持“用户安装方案”,这意味着所有的Python发行版支持为特定用户设定一个替代的包安装位置。对于不同操作系统的默认用户安装位置可以通过site.USER_BASE变量查看:

python -m site [--user-base] [--user-site]

如果不加后面的可选参数,将会输出所有sys.path,USER_BASE,USER_SITE变量的值,并显示对应的目录是否存在。
对Linux系统,默认的用户安装目录在~/.local。当然你也可用通过修改USERPYTHONBASE变量的值来修改用户安装位置。

export PYTHONUSERBASE=/myappenv

然后在使用pip安装包时加上--user选项,就可以将包安装到自己指定的目录了。

pip install --user SomePackage

注意这种安装方法遵循如下规则:

  • 如果python路径下已经安装了一些包,而这些包与用户要安装的包相冲突,那么不会为用户安装此包。
  • 如果python路径下已经安装了符合要求的包,pip不再为用户安装此包。

离线安装

在无法访问网络的环境下安装包,可以提前将所需的包文件下载好,普通包的下载地址https://pypi.org/
安装包保存在同一目录下如DIR,然后执行命令:

pip install --no-index --find-links=DIR PACKAGENAME

解释一下两个选项,--find-links指定一个链接或者路径,解析器会到指定的地方去找安装文件,--no-index让pip忽略package index,只到--find-links指定的链接内去找。

所以如果你只是因为某个包在使用pip在线安装时下载速度慢,想用下载好的wheel文件离线安装,那你可能需要下面的命令:

pip install --find-links=DIR PACKAGENAME

这样pip还是会联网查找其他包,尤其是所需的依赖包,就不用自己考虑依赖问题了。

参考

安装第三方模块
User guide of pip
https://pip.pypa.io/en/stable/reference/pip_install/#install-no-index

posted @ 2020-08-20 21:59  tofengz  阅读(249)  评论(0编辑  收藏  举报