python散装笔记——81: PyPI 软件包管理器: pip 模块的使用

liftword4个月前 (03-06)技术文章25

有时,您可能需要在 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文件包含安装脚本,否则必须先运行安装脚本。

相关文章

Python exe 文件反编译为 Python 脚本

前言将 Python 可执行文件(.exe)反编译为 Python 脚本是一项有趣的技术挑战,可以帮助我们理解程序的工作原理,以及可能包含的逻辑和算法。虽然反编译不是一项简单的任务,并且对于使用各种保...

使用 Python 让旧照片修复清晰

翻开家里的的相片册,可以看到每张照片都是那么的弥足珍贵,特别是很久以前的照片,都是美好的回忆,还有那些年错过的场景,都被记录下来了,不过可惜的是,随着时间的流逝,照片可能泛黄,出现划痕,画质损失等等,...

Python shutil 库详解

1. shutil库概述简介shutil是Python中的一个标准库,它提供了一系列对文件和文件集合的高级操作。“shutil”这个名字是“shell utilities”(外壳工具)的缩写,它的功能...

Python自动化打包

最近需要打包一二十个同报名的Android apk用来测试,但是版本不一样,如果手动的去打包一个个的太麻烦了,于是乎想着用Python写一个脚本用来打包这些apk。Python执行打包命令首先需要Py...