Python中pip安装与使用及错误解决方案合集

2023-11-17


前言

本文旨在记录 pip 安装与使用,以及安装过程中遇到问题的解决方案。


一、pip 安装与使用

1.pip 升级:
sudo python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.安装python包:
sudo python -m pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple xxx

3.安装python包的 requirements.txt:
sudo python -m pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

4.列出已经安装的python包:
sudo python -m pip list

5.卸载已经安装的python包:
sudo python -m pip uninstall xxx

二、pip安装错误解决方案合集

"ModuleNotFoundError: No module named ‘xxx’"这个报错是个非常常见的报错,几乎每个python程序员都遇到过,导致这个报错的原因也非常多,下面是我曾经遇到过的原因和解决方案

1.module包没安装
2.忘了import
3.没有__init__.py文件
4.package包的版本不对
5.自定义的包名与安装的包名相同,导致import包的时候导错了包
6.没设置PYTHONPATH或者
7.自建的module包所在路径不在PYTHONPATH下
8.不恰当的使用了相对导入

下面是每种情况分别的解决方案:

1.module包没安装

使用场景: pip安装的第三方的包找不到
1. 查找安装包
pip list | grep xxx   #把xxx替换成你的包名即可
2. 安装xxx 
pip install xxx -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

2.import缺失

使用场景: pip安装的第三方的包找不到、自建的module包找不到
module安装了但是没有import,这个原因也经常碰到,比如使用了datetime对象, 但是没有导入datetime包。解决方案同样非常简单,import 相应的包即可。比如下面的案例:
import os
import sys
import time
import datetime

这种情况最容易出现在从别处copy了一段了代码,但是没有把所有用到的module导入进来。

3.init.py文件缺失

使用场景: 自建的module包找不到
因为python在解释包的时候会给本文件夹也就是本module下的所有文件建立一个索引放在当前路径下的__init__.py文件中,如果没有module的文件索引,我们即使import了指定的包,解释器还是找不到这个module下的文件的,因而我们一般会在每个文件夹下建一个空的__init__.py文件。如果一个文件夹下没有__init__.py文件,不会被当做一个module。

解决方案: 如果这个包是你自己写的,不妨检查一下待导入的包的根目录是否存在一个__init__.py文件,没有的话建一个空的__init__.py文件即可 (注意:不光要检查待导入的包根目录是否存在__init__.py文件,还需要检查当前程序所在文件夹是否存在这个文件)。如果这个包是pip install来的,那基本上可以忽略这种可能了,继续尝试下面的原因吧。

对于缺少__init__.py文件这种情况,还有一种报错形式是:ImportError: attempted relative import with no known parent package

4.安装的第三方module包的版本不对

使用场景: pip安装的第三方的包找不到
当看到这里,说明你已经检查并确定了module已经被安装了,import语句也有,init.py文件同样满足。这个时候或许可以怀疑一下是否是第三方包的版本与当前所用python版本不兼容。

解决方案是需要先卸载原来pip 安装的包,然后安装一个指定版本的包。比如python3不兼容 2.0版本及以上的DBUitls包,需要安装1.x的版本才行。

安装特定版本:
pip uninstall DBUtils
pip install DBUtils==1.3

5.import导错包

使用场景: pip安装的第三方的包找不到、自建的module包找不到
这种情况不经常发生,但是一旦发生,非常难找到原因。我曾经就自己在当前项目下创建了名为kafka的module文件夹(包含__init__.py文件的文件夹被称为module文件夹),而我又使用pip命令安装了一个kafka包,我在程序中使用import kafka命令导包的时候其实我是想导入pip下来的第三方包的,但是因为python包管理机制和包查找优先级,会优先从当前路径下找指定的包,如果当前文件夹下存在指定的包,则不会去PYATHONPATH或者其他路径下找包。

解决方式是给自己的文件夹换个名字,使得与第三方包名不冲突。

6.未设置PYTHONPATH环境变量

使用场景: pip安装的第三方的包找不到
将这条命令即可将刚才的包路径添加到环境变量中:
export PYTHONPATH= ./venv/lib/python3.9/site-packages:$PYTHONPATH

7.自建的module包所在路径不在PYTHONPATH下

使用场景: 自建的包找不到
在IDE中执行python程序,编译器会自动把当前项目的根目录加入到包查找路径中,可以理解为加到PYTHONPATH下,所以直接执行是没有问题的。但是在cmd或者terminal控制台中直接使用python相关命令来执行程序,不会自动将当前项目加入到PYTHONPATH环境变量下,如果涉及到import其他文件夹下的变量就会报类似ImportError: No module named xxx这样的错误。

解决方法是使用sys.append()命令把报警包的所在文件夹路径加入到PYTHONPATH。

import sys
import logging
import os

# 把当前文件所在文件夹的父文件夹路径加入到PYTHONPATH
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from conf.online_conf import *

8.不恰当的使用了相对导入

使用场景: 相对导入与绝对导入混淆
1.绝对导入:
绝对导入的格式为 import A.B 或 from A import B
import fibo    # 隐式相对导入
from fibo import fibo1, fibo2    # 绝对路径导入
import fibo as fib    # 重命名
from fibo import fib as fibonacci

2.相对导入:
相对导入格式为 from .A import B 或 from ..X import Y, . 代表当前包, .. 代表上层包, ... 代表上上层包,依次类推。
from . import echo    # 表示从当前文件所在package导入echo这个module
from .. import formats    # 表示从当前文件所在package的上层package导入formats这个子package或者moudle
from ..filters import equalizer # 表示从当前文件所在package的上层package导入的filters这个子package或者子module中导入equalizer

相对导入基于当前模块的名称。由于主模块的名称始终为"__main__",因此用作 Python 应用程序主模块的模块必须始终使用绝对导入。主模块所在文件夹不会被视作package,因此除了主模块外,与主模块处在同个文件夹的模块(也就是同级的模块)也必须使用绝对导入。

三、pip更换镜像

在学习或者工作中,我们经常在搭建环境时需要下载安装一些库文件,但是pip默认下载使用的源是国外的,因此下载速度会很慢,所以在下载的时候我们可以将源地址换为国内的源,会大大提升下载速度。

1.常用的国内镜像源

(1)阿里云 http://mirrors.aliyun.com/pypi/simple/
(2)豆瓣http://pypi.douban.com/simple/
(3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
(5)华中科技大学http://pypi.hustunique.com/

2.常用的国内源

在使用pip的时候,加上参数-i和镜像地址(如
https://pypi.tuna.tsinghua.edu.cn/simple/),
例如:
python -m pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests
这样就会从清华镜像安装文件

如果加国内镜像后无法进行pip安装,则取消镜像试试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python中pip安装与使用及错误解决方案合集 的相关文章

随机推荐

  • 复旦微单片机FM33LG系列之GPIO操作(FL库)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 引用文件 二 快速IO操作指南 1 GPIO位输出高电平 2 GPIO位输出低电平 3 GPIO位输出电平翻转 4 GPIO端口8位并口输出 5 GPIO端口1
  • 数据结构之快速排序算法

    文章目录 快速排序的思想 快速排序的递归实现 快速排序的非递归实现 快速排序的思想 设置两个变量i j 排序开始的时候 令i 0 j length 1 以第一个数组元素作为比较 赋值给temp 即temp nums 0 从j开始向前扫描 找
  • 一篇了解Containerd容器运行时及安装

    文章目录 一 Containerd简介 1 什么是Containerd 2 Containerd和Docker的区别是什么 二 使用yum仓库安装Containerd 三 使用源码安装Containerd 四 配置国内镜像加速地址 一 Co
  • 寻找第K大的数的方法总结

    寻找第K大的数的方法总结 今天看算法分析是 看到一个这样的问题 就是在一堆数据中查找到第k个大的值 名称是 设计一组N个数 确定其中第k个最大值 这是一个选择问题 当然 解决这个问题的方法很多 本人在网上搜索了一番 查找到以下的方式 决定很
  • vscode 跳转到指定的行数的快捷键

    在工作中 尤其是容易产生错误的 js 代码 报错之后会提示有错误代码的位置 也就是在哪一行出问题了 在vscode 编辑器中 可以使用快捷键 跳转到指定的行数 快捷键 Ctrl G 然后在弹出的框中输入行数就可以了
  • 业务风控思考:如何建立识别、防御和决策体系?

    导语 在疫情扰乱生活节奏的三年中 经常会看到企业 降本增效 的话题 如 让员工感受寒气 搬走办公室绿植 降低食堂伙食标准等等 就企业运作成本而言 降低黑灰产 羊毛党 打码平台等 盗夺的有限资源无疑是最有效的降本方式之一 据不完全统计 我国现
  • CSS高级篇——多背景&背景原点

    CSS 提供了很多处理背景的手段 多背景 background image 可以同时设置多个背景图片 background image url this jpg url that gif url theother png 效果如下 back
  • 深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13

    import tensorflow as tf import matplotlib pyplot as plt matplotlib inline import numpy as np import pathlib 数据读取及预处理 dat
  • imap服务器收缓存pst文件夹,Outlook 转移OST数据文件 IMAP账户

    问题 windows8系统 装了Outlook2013 占用了C盘大约10G空间 主要都是数据文件 OST文件 占用的 希望能够把数据文件从C盘移至其他盘 并且账户是IMAP账户 不是Exchange google一下 绝大多数解决方案是针
  • 儿童趣味编程是什么?如何启迪编程思维?

    从前在大多数人的认知里 编程是成年人才能接触和应用到的知识和技术 它好像很晦涩难懂 离小孩子们的世界非常远 但是身处互联网时代 编程已经面向所有人群 孩子们也不必等到大学才能接触到相关知识 而是在小学或者更早的学龄前阶段 就有了系统学习编程
  • 日志的管理

    日志介绍 1 日志文件是重要的系统信息文件 记录了许多的重要的系统事件 包括有用户的登录信息 系统的启动信息 系统的安全信息 邮件相关信息 各种服务相关信息等 2 日志对于安全来说非常的重要 它记录了系统每天发生的各种事情 通过日志来检查错
  • mysql_real_connect 连接失败 问题!

    mysql 的c函数mysql real connect 用localhost为参数进行连接 第一次会成功 但第二次就会抛出异常 本人遇到这个问题 查找了好久 最后才发现问题所在 解决办法 改用ip地址就可以 经验共享
  • 目标检测之 IoU

    转载自 https blog csdn net u014061630 article details 82818112 IoU 作为目标检测算法性能 mAP 计算的一个非常重要的函数 但纵观 IoU 计算的介绍知识 都是直接给出代码 给出计
  • 基于树莓派博通BCM2835芯片手册导读写编简单引脚驱动代码编译和测试(树莓派)

    编写引脚驱动代码 这边写的是17引脚的驱动代码代码 IO口控制的代码在下面 这边只是简单的代码 驱动代码 include
  • 获取微信步数

    获取微信步数 getWalkCounts function var that this wx login success res wx getWeRunData success res1 console log res1 if res1 e
  • Java项目:ERP管理系统(java+SpringBoot+EasyUI+maven+mysql)

    源码获取 博客首页 资源 里下载 项目介绍 系统主要功能包括 首页 零售管理 零售出库 零售退货 采购管理 采购订单 采购入库 采购退货 销售管理 销售订单 销售出库 销售退货 仓库管理 其它入库 其它出库 调拨出库 组装单 拆卸单 财务管
  • Maven 中启动 Tomcat,控制台打印信息出现乱码

    Tomcat 可以正常启动 但是控制台输出打印的是乱码 很多教程要修改 settings 中的 VM Options 或者 File Encodings 但我的配置都是正确的 最后发现是因为新版本 Tomcat 改用 utf8 编码输出日志
  • 嵌入式开发--SPI介绍和驱动开发

    目录 一 通信总线SPI介绍 二 SPI时序介绍和工作模式 三 基于stm32的spi初始化步骤 一 通信总线SPI介绍 SPI 全称为Serial Peripheral Interface 是一种同步的串行通信协议 SPI协议最初由Mot
  • 不使用第3个变量,实现两个数的对调

    任务描述 本关任务 下列程序是不用第三个变量 实现将两个数进行对调的操作 程序代码如下 1 include
  • Python中pip安装与使用及错误解决方案合集

    文章目录 前言 一 pip 安装与使用 二 pip安装错误解决方案合集 1 module包没安装 2 import缺失 3 init py文件缺失 4 安装的第三方module包的版本不对 5 import导错包 6 未设置PYTHONPA