python散装笔记——81: PyPI 软件包管理器: pip 模块的使用
有时,您可能需要在 python 中使用 pip 包管理器,例如,当某些导入可能引发 ImportError 时,您需要处理异常。如果在 Windows 上解压缩,
Python_root/Scripts/pip.exe 内会存储 __main___.py 文件,其中导入了来自 pip 包的主类。这意味着只要使用 pip 可执行文件,就会使用 pip 软件包。有关 pip 作为可执行文件的用法,请参阅: pip: PyPI 软件包管理器
1: 命令使用示例
import pip
command = 'install'
parameter = 'selenium'
second_param = 'numpy' # You can give as many package names as needed
switch = '--upgrade'
pip.main([command, parameter, second_param, switch])
只有需要的参数才是必须的,因此 pip.main(['freeze']) 和 pip.main(['freeze', '', '']) 都可以接受。
批量安装
可以在一次调用中传递多个软件包名称,但如果其中一个安装/升级失败,整个安装过程就会停止,并以状态 1 结束。
import pip
installed = pip.get_installed_distributions()
list = []
for i in installed:
list.append(i.key)
pip.main(['install']+list+['--upgrade'])
如果不想在某些安装失败时停止,可在循环中调用安装。
for i in installed:
pip.main(['install']+i.key+['--upgrade'])
2: 处理 ImportError 异常
将 python 文件作为模块使用时,无需总是检查软件包是否已安装,但它对脚本仍然有用。
if __name__ == '__main__':
try:
import requests
except ImportError:
print("To use this module you need 'requests' module")
t = input('Install requests? y/n: ')
if t == 'y':
import pip
pip.main(['install', 'requests'])
import requests
import os
import sys
pass
else:
import os
import sys
print('Some functionality can be unavailable.')
else:
import requests
import os
import sys
3: 强制安装
许多软件包,例如 3.4 版本的软件包,可以在 3.6 上正常运行,但如果没有特定平台的发行版,就无法安装,但有变通办法。在 .whl 文件(称为轮子)中,命名规则决定了能否在指定平台上安装软件包。例如
scikit_learn-0.18.1-cp36-cp36m-win_amd64.whl
[package_name]-[version]-[python interpreter]-[pythoninterpreter]-[Operating System].whl
如果更改了轮子文件的名称,因此平台匹配,即使平台或 python 版本不匹配,pip 也会尝试安装软件包。从名称中移除平台或解释器会在最新版本的 pip 模块中引发错误 kjhfkjdf.whl is not a valid wheel filename...。
也可以使用 7-zip 等压缩工具解压 .whl 文件。- 它通常包含发行版元文件夹和源文件文件夹。这些源文件可以简单地解压到 site-packages 目录中,除非此wheel文件包含安装脚本,否则必须先运行安装脚本。