前言
本文旨在記錄 pip 安裝與使用,以及安裝過程中遇到問題的解決方案。
一、pip 安裝與使用
1.pip 升級(jí):
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.列出已經(jīng)安裝的python包:
sudo python -m pip list
5.卸載已經(jīng)安裝的python包:
sudo python -m pip uninstall xxx
二、pip安裝錯(cuò)誤解決方案合集
"ModuleNotFoundError: No module named ‘xxx’"這個(gè)報(bào)錯(cuò)是個(gè)非常常見的報(bào)錯(cuò),幾乎每個(gè)python程序員都遇到過,導(dǎo)致這個(gè)報(bào)錯(cuò)的原因也非常多,下面是我曾經(jīng)遇到過的原因和解決方案
1.module包沒安裝
2.忘了import
3.沒有__init__.py文件
4.package包的版本不對(duì)
5.自定義的包名與安裝的包名相同,導(dǎo)致import包的時(shí)候?qū)уe(cuò)了包
6.沒設(shè)置PYTHONPATH或者
7.自建的module包所在路徑不在PYTHONPATH下
8.不恰當(dāng)?shù)氖褂昧讼鄬?duì)導(dǎo)入
下面是每種情況分別的解決方案:
1.module包沒安裝
使用場(chǎng)景: pip安裝的第三方的包找不到
1. 查找安裝包
pip list | grep xxx #把xxx替換成你的包名即可
2. 安裝xxx
pip install xxx -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
2.import缺失
使用場(chǎng)景: pip安裝的第三方的包找不到、自建的module包找不到
module安裝了但是沒有import,這個(gè)原因也經(jīng)常碰到,比如使用了datetime對(duì)象, 但是沒有導(dǎo)入datetime包。解決方案同樣非常簡(jiǎn)單,import 相應(yīng)的包即可。比如下面的案例:
import os
import sys
import time
import datetime
這種情況最容易出現(xiàn)在從別處copy了一段了代碼,但是沒有把所有用到的module導(dǎo)入進(jìn)來。
3.init.py文件缺失
使用場(chǎng)景: 自建的module包找不到
因?yàn)閜ython在解釋包的時(shí)候會(huì)給本文件夾也就是本module下的所有文件建立一個(gè)索引放在當(dāng)前路徑下的__init__.py文件中,如果沒有module的文件索引,我們即使import了指定的包,解釋器還是找不到這個(gè)module下的文件的,因而我們一般會(huì)在每個(gè)文件夾下建一個(gè)空的__init__.py文件。如果一個(gè)文件夾下沒有__init__.py文件,不會(huì)被當(dāng)做一個(gè)module。
解決方案: 如果這個(gè)包是你自己寫的,不妨檢查一下待導(dǎo)入的包的根目錄是否存在一個(gè)__init__.py文件,沒有的話建一個(gè)空的__init__.py文件即可 (注意:不光要檢查待導(dǎo)入的包根目錄是否存在__init__.py文件,還需要檢查當(dāng)前程序所在文件夾是否存在這個(gè)文件)。如果這個(gè)包是pip install來的,那基本上可以忽略這種可能了,繼續(xù)嘗試下面的原因吧。
對(duì)于缺少__init__.py文件這種情況,還有一種報(bào)錯(cuò)形式是:ImportError: attempted relative import with no known parent package
4.安裝的第三方module包的版本不對(duì)
使用場(chǎng)景: pip安裝的第三方的包找不到
當(dāng)看到這里,說明你已經(jīng)檢查并確定了module已經(jīng)被安裝了,import語(yǔ)句也有,init.py文件同樣滿足。這個(gè)時(shí)候或許可以懷疑一下是否是第三方包的版本與當(dāng)前所用python版本不兼容。
解決方案是需要先卸載原來pip 安裝的包,然后安裝一個(gè)指定版本的包。比如python3不兼容 2.0版本及以上的DBUitls包,需要安裝1.x的版本才行。
安裝特定版本:
pip uninstall DBUtils
pip install DBUtils==1.3
5.import導(dǎo)錯(cuò)包
使用場(chǎng)景: pip安裝的第三方的包找不到、自建的module包找不到
這種情況不經(jīng)常發(fā)生,但是一旦發(fā)生,非常難找到原因。我曾經(jīng)就自己在當(dāng)前項(xiàng)目下創(chuàng)建了名為kafka的module文件夾(包含__init__.py文件的文件夾被稱為module文件夾),而我又使用pip命令安裝了一個(gè)kafka包,我在程序中使用import kafka命令導(dǎo)包的時(shí)候其實(shí)我是想導(dǎo)入pip下來的第三方包的,但是因?yàn)閜ython包管理機(jī)制和包查找優(yōu)先級(jí),會(huì)優(yōu)先從當(dāng)前路徑下找指定的包,如果當(dāng)前文件夾下存在指定的包,則不會(huì)去PYATHONPATH或者其他路徑下找包。
解決方式是給自己的文件夾換個(gè)名字,使得與第三方包名不沖突。
6.未設(shè)置PYTHONPATH環(huán)境變量
使用場(chǎng)景: pip安裝的第三方的包找不到
將這條命令即可將剛才的包路徑添加到環(huán)境變量中:
export PYTHONPATH= ./venv/lib/python3.9/site-packages:$PYTHONPATH
7.自建的module包所在路徑不在PYTHONPATH下
使用場(chǎng)景: 自建的包找不到
在IDE中執(zhí)行python程序,編譯器會(huì)自動(dòng)把當(dāng)前項(xiàng)目的根目錄加入到包查找路徑中,可以理解為加到PYTHONPATH下,所以直接執(zhí)行是沒有問題的。但是在cmd或者terminal控制臺(tái)中直接使用python相關(guān)命令來執(zhí)行程序,不會(huì)自動(dòng)將當(dāng)前項(xiàng)目加入到PYTHONPATH環(huán)境變量下,如果涉及到import其他文件夾下的變量就會(huì)報(bào)類似ImportError: No module named xxx這樣的錯(cuò)誤。
解決方法是使用sys.append()命令把報(bào)警包的所在文件夾路徑加入到PYTHONPATH。
import sys
import logging
import os
# 把當(dāng)前文件所在文件夾的父文件夾路徑加入到PYTHONPATH
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from conf.online_conf import *
8.不恰當(dāng)?shù)氖褂昧讼鄬?duì)導(dǎo)入
使用場(chǎng)景: 相對(duì)導(dǎo)入與絕對(duì)導(dǎo)入混淆
1.絕對(duì)導(dǎo)入:
絕對(duì)導(dǎo)入的格式為 import A.B 或 from A import B
import fibo # 隱式相對(duì)導(dǎo)入
from fibo import fibo1, fibo2 # 絕對(duì)路徑導(dǎo)入
import fibo as fib # 重命名
from fibo import fib as fibonacci
2.相對(duì)導(dǎo)入:
相對(duì)導(dǎo)入格式為 from .A import B 或 from ..X import Y, . 代表當(dāng)前包, .. 代表上層包, ... 代表上上層包,依次類推。
from . import echo # 表示從當(dāng)前文件所在package導(dǎo)入echo這個(gè)module
from .. import formats # 表示從當(dāng)前文件所在package的上層package導(dǎo)入formats這個(gè)子package或者moudle
from ..filters import equalizer # 表示從當(dāng)前文件所在package的上層package導(dǎo)入的filters這個(gè)子package或者子module中導(dǎo)入equalizer
相對(duì)導(dǎo)入基于當(dāng)前模塊的名稱。由于主模塊的名稱始終為"__main__",因此用作 Python 應(yīng)用程序主模塊的模塊必須始終使用絕對(duì)導(dǎo)入。主模塊所在文件夾不會(huì)被視作package,因此除了主模塊外,與主模塊處在同個(gè)文件夾的模塊(也就是同級(jí)的模塊)也必須使用絕對(duì)導(dǎo)入。
三、pip更換鏡像
在學(xué)習(xí)或者工作中,我們經(jīng)常在搭建環(huán)境時(shí)需要下載安裝一些庫(kù)文件,但是pip默認(rèn)下載使用的源是國(guó)外的,因此下載速度會(huì)很慢,所以在下載的時(shí)候我們可以將源地址換為國(guó)內(nèi)的源,會(huì)大大提升下載速度。文章來源:http://www.zghlxwxcb.cn/news/detail-595183.html
1.常用的國(guó)內(nèi)鏡像源
(1)阿里云 http://mirrors.aliyun.com/pypi/simple/
(2)豆瓣http://pypi.douban.com/simple/
(3)清華大學(xué) https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中國(guó)科學(xué)技術(shù)大學(xué) http://pypi.mirrors.ustc.edu.cn/simple/
(5)華中科技大學(xué)http://pypi.hustunique.com/文章來源地址http://www.zghlxwxcb.cn/news/detail-595183.html
2.常用的國(guó)內(nèi)源
在使用pip的時(shí)候,加上參數(shù)-i和鏡像地址(如
https://pypi.tuna.tsinghua.edu.cn/simple/),
例如:
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests
這樣就會(huì)從清華鏡像安裝文件
如果加國(guó)內(nèi)鏡像后無法進(jìn)行pip安裝,則取消鏡像試試。
到了這里,關(guān)于Python中pip安裝與使用及錯(cuò)誤解決方案合集的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!