Python的依赖管理
注意事项
建议使用普通用户安装第三方包;使用root用户安装第三方包可能会导致一些权限问题,而且可能会影响系统的稳定性和安全性。为了避免潜在的问题,建议在普通用户下使用以下方式安装第三方包。
Pip的常用操作
Pip是 Python 的包管理工具,用于安装和管理 Python 包。执行 "pip install pip" 时,会更新 pip 工具本身到最新版本。
## 安装全局依赖包
pip install <package_name>
## 卸载全局依赖包
pip uninstall <package_name>
## 列出所有全局依赖包
pip list
## 列出所有全局依赖包,与pip list的区别是输出信息的格式不同
pip freeze
全局依赖导入导出
## 将全局依赖导出到当前目录下的 requirements.txt 文件中
pip freeze > requirements.txt
## 安装当前目录下 requirements.txt 文件中的所有依赖包
pip install -r requirements.txt
项目依赖导入导出
仅导出当前项目的的依赖信息需要使用 pipreqs 工具
## 安装pipreqs
pip install pipreqs
## 在项目根目录下执行如下命令,该命令会导出当前项目的依赖到 requirements.txt 文件中
## 实测 pipreqs 导出的依赖不全,因此建议直接使用 freeze 导出全局所有依赖
pipreqs
## 安装当前目录下 requirements.txt 文件中的所有依赖包
pip install -r requirements.txt
生成全局依赖树(并非当前项目)
## 生成当前环境下的全局依赖树(并非当前项目)
pipdeptree > dependency_tree.txt
卸载所有依赖
注:如下命令很危险,不要在root用户下执行
## 生成一个包含当前环境中所有包的列表
pip freeze > installed_packages.txt
## 卸载列表中的所有包
pip uninstall -r installed_packages.txt -y
## 查看当前环境中的所有包
pip list
注:删除所有依赖是一个危险的操作,尤其是在root用户下,可能直接导致系统瘫痪。在Ubuntu的root用户下删除所有pip依赖后,会导致系统无法联网,通过如下命令解决:
## 手动连接指定网卡,一般为 eth0 或 ens33
sudo dhclient ens33
## 安装netplan
apt install netplan.io
## 使网卡配置生效
sudo netplan apply
卸载Python
通过pip安装的依赖包会统一存放在当前用户的特定目录下;为了确保系统安全,应该使用非root用户安装所有包,以使所有依赖包都存储在同一个用户目录下;
卸载Python时,已经下载的全局依赖不会被删除;因此在卸载 python 前,要先卸载所有依赖,然后再卸载python。
查看全局依赖的安装位置
Python没有提供查看全局依赖安装位置的命令,但pip
提供了类似的功能。通过 pip show
可以查看指定依赖的安装位置,以此便可知全局依赖的安装位置:
## 显示 requests 包的详细信息和安装位置(当前环境下的所有依赖都安装在同一个位置)
pip show requests
## 查看当前环境下所有的依赖包
pip list