在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