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

liftword3个月前 (03-06)技术文章21

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

相关文章

pyinstaller打包python程序高级技巧

pyinstaller是最常用的python程序打包成可执行程序(exe)的工具,这篇文章将介绍几个pyinstaller打包可能遇到的问题及其解决方法。安装pyinstaller的安装很简单,直接p...

Python exe 文件反编译为 Python 脚本

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

必知必会!10个Python超实用技巧

技巧一:快速赋值与解包在 Python 中,通过列表给多个变量赋值是一项非常实用的技巧。假设我们有一个包含三个元素的列表[1, 2, 3],想要将这三个元素分别赋值给三个变量a、b、c,只需简单地写成...

使用 Python 让旧照片修复清晰

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

【Python语音识别系列】实现m4a到wav语音格式的批量转化(源码)

这是我的第388篇原创文章。一、引言在语音识别和音频处理领域,我们经常需要对音频文件格式进行转换,例如将 M4A 格式转为更常见的 WAV 格式。本文将基于pydub这个库批量实现m4a到wav语音格...

Python自动化打包

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