最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?ModuleNotFoundError:?No?module?named?‘xxx‘可能的解決方案大全

 更新時間:2023年07月14日 11:01:54   作者:Chat?Gpt  
本文主要介紹了Python?ModuleNotFoundError:?No?module?named?‘xxx‘可能的解決方案大全,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧Chat?Gpt<BR>

Python報錯:"ModuleNotFoundError: No module named 'xxx'"這個報錯是個非常常見的報錯,幾乎每個python程序員都遇到過,導(dǎo)致這個報錯的原因也非常多。

下面是我曾經(jīng)遇到過的原因和解決方案:

  • module包沒安裝
  • 忘了import
  • 沒有__init__.py文件
  • package包的版本不對
  • 自定義的包名與安裝的包名相同,導(dǎo)致import包的時候?qū)уe了包
  • 沒設(shè)置PYTHONPATH或者
  • 自建的module包所在路徑不在PYTHONPATH下
  • 不恰當?shù)氖褂昧讼鄬?dǎo)入

下面是每種情況分別的解決方案:

1、module包沒安裝

使用場景: pip安裝的第三方的包找不到

這個原因比較常見,解決辦法就是pip install相應(yīng)的包即可。如果不確定是否安裝了這個包,使用下面的命令查找報警的那個包名,如果有輸出結(jié)果,說明存在這個包,否則說明不存在這個包。

pip list | grep xxx   #把xxx替換成你的包名即可

如果在pip install的過程中提示包找不到,沒有這個版本的包,可能是需要加上內(nèi)置源,比如想要下載公司內(nèi)部的包,那肯定需要加上公司的內(nèi)置源才能找到相應(yīng)的包。內(nèi)置源的的使用方式加上-i參數(shù)即可。

pip install xxx -i https://xxx.xx.org/simple
# 比如下面是清華的源
# https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

2、忘了import

使用場景: pip安裝的第三方的包找不到、自建的module包找不到

module安裝了但是沒有import,這個原因也經(jīng)常碰到,比如使用了datetime對象, 但是沒有導(dǎo)入datetime包。解決方案同樣非常簡單,import 相應(yīng)的包即可。比如下面的案例:

import os
import sys
import time
import datetime

這種情況最容易出現(xiàn)在從別處copy了一段了代碼,但是沒有把所有用到的module導(dǎo)入進來。

3、沒有__init__.py文件

使用場景: 自建的module包找不到

因為python在解釋包的時候會給本文件夾也就是本module下的所有文件建立一個索引放在當前路徑下的__init__.py文件中,如果沒有module的文件索引,我們即使import了指定的包,解釋器還是找不到這個module下的文件的,因而我們一般會在每個文件夾下建一個空的__init__.py文件。如果一個文件夾下沒有__init__.py文件,不會被當做一個module。

解決方案: 如果這個包是你自己寫的,不妨檢查一下待導(dǎo)入的包的根目錄是否存在一個__init__.py文件,沒有的話建一個空的__init__.py文件即可 (注意:不光要檢查待導(dǎo)入的包根目錄是否存在__init__.py文件,還需要檢查當前程序所在文件夾是否存在這個文件)。如果這個包是pip install來的,那基本上可以忽略這種可能了,繼續(xù)嘗試下面的原因吧。

對于缺少__init__.py文件這種情況,還有一種報錯形式是: ImportError: attempted relative import with no known parent package

4、安裝的第三方module包的版本不對

使用場景: pip安裝的第三方的包找不到

當看到這里,說明你已經(jīng)檢查并確定了module已經(jīng)被安裝了,import語句也有,init.py文件同樣滿足。這個時候或許可以懷疑一下是否是第三方包的版本與當前所用python版本不兼容。

解決方案是需要先卸載原來pip 安裝的包,然后安裝一個指定版本的包。比如python3不兼容 2.0版本及以上的DBUitls包,需要安裝1.x的版本才行。

pip uninstall DBUtils
pip install DBUtils==1.3

可能有同學(xué)會問怎么確定這個module是否跟當前的python版本兼容呢?這個很遺憾的告訴你,我也不知道,但是可以嘗試把’找不到xxx包' 的報警提示直接復(fù)制到搜索引擎中搜索結(jié)果,如果是因為不兼容的原因很容易就能找到對應(yīng)的說明博客,博客中一定會說明需要安裝哪個版本的包比較合適,按照博客說明來操做即可。如果找了一圈都沒發(fā)現(xiàn)關(guān)于不兼容的說法,放棄吧,說明你的問題應(yīng)該不是這個情況。打起精神,繼續(xù)嘗試下一種解決方案吧。

5、自建的包名與第三方安裝的包名相同,導(dǎo)致import包的時候?qū)уe了包

使用場景: pip安裝的第三方的包找不到、自建的module包找不到

這種情況不經(jīng)常發(fā)生,但是一旦發(fā)生,非常難找到原因。我曾經(jīng)就自己在當前項目下創(chuàng)建了名為kafka的module文件夾(包含__init__.py文件的文件夾被稱為module文件夾),而我又使用pip命令安裝了一個kafka包,我在程序中使用import kafka命令導(dǎo)包的時候其實我是想導(dǎo)入pip下來的第三方包的,但是因為python包管理機制和包查找優(yōu)先級,會優(yōu)先從當前路徑下找指定的包,如果當前文件夾下存在指定的包,則不會去PYATHONPATH或者其他路徑下找包。

解決方式是給自己的文件夾換個名字,使得與第三方包名不沖突。

6、沒設(shè)置PYTHONPATH環(huán)境變量

使用場景: pip安裝的第三方的包找不到

有同學(xué)可能會說為什么有同學(xué)也沒設(shè)置這個環(huán)境變量,為啥他就能順利執(zhí)行,我就不行,這里我只能說每個人的電腦的開發(fā)環(huán)境不一樣,開發(fā)環(huán)境這種東西永遠帶有點玄學(xué)的意味。

解決方案:

再次執(zhí)行安裝intall這個包的命令,這時它不會再次安裝,而是會提示xxx包在xx路徑已經(jīng)滿足,而之所以找不到,是因為沒有把這個路徑添加到PYTHONPATH這一環(huán)境變量中。這里以DBUtils包為例:

% pip install DBUtils==1.3
Requirement already satisfied: DBUtils==1.3 in ./venv/lib/python3.9/site-packages (1.3)

復(fù)制上面的路徑,然后在terminal終端執(zhí)行下面這條命令,把加粗標記的路徑改成你剛才復(fù)制的路徑就好。這條命令即可將剛才的包路徑添加到環(huán)境變量中。

export PYTHONPATH= ./venv/lib/python3.9/site-packages:$PYTHONPATH

無論是否在虛擬環(huán)境中,這樣的解決方式都可以生效。

再次執(zhí)行程序,應(yīng)該不會報包找不到的問題了。

如果仍然不行,那么指定pip -V命令,查看輸出結(jié)果中的"/pip"之前路徑是否和剛才加入環(huán)境變量的路徑一樣,如果不一樣,把這個路徑也加入到環(huán)境變量中。

% pip -V
pip 21.1.3 from /Users/lch/python_project/learn_python/venv/lib/python3.9/site-packages/pip (python 3.9)

其實我的pip -V輸出的路徑和剛才的路徑是一樣的,但是為了演示不一樣的情況,這里假設(shè)這個路徑和剛才添加的路徑不一樣,這里再添加一遍到環(huán)境變量。

export PYTHONPATH= /Users/lch/python_project/learn_python/venv/lib/python3.9/site-packages:$PYTHONPATH

提示: 直接在終端運行export關(guān)鍵字來添加環(huán)境變量的方式可以讓變量立即生效,不需要source某個文件,但是這個方式只適用于當前終端,一旦當前終端關(guān)閉或在另一個終端中,則失效。如果想要長久生效,參考“Linux和Mac環(huán)境變量設(shè)置”將路徑添加到環(huán)境變量文件中。

7、自建的module包所在路徑不在PYTHONPATH下

適用場景: 自建的包找不到

在IDE中執(zhí)行python程序,編譯器會自動把當前項目的根目錄加入到包查找路徑中,可以理解為加到PYTHONPATH下,所以直接執(zhí)行是沒有問題的。但是在cmd或者terminal控制臺中直接使用python相關(guān)命令來執(zhí)行程序,不會自動將當前項目加入到PYTHONPATH環(huán)境變量下,如果涉及到import其他文件夾下的變量就會報類似ImportError: No module named xxx這樣的錯誤。

解決方法是使用sys.append()命令把報警包的所在文件夾路徑加入到PYTHONPATH。下面是一個 :

比如你的項目下叫做learn_python, 下面是你的項目根目錄下的文件結(jié)構(gòu)。

├──README.md
├──__init__.py
├──conf
│   ├── __init__.py
│   ├── offline_conf.py # 本地運行配置文件
│   └── online_conf.py  # 線上運行配置文件
└──server      # 啟動服務(wù)文件夾
     ├── __init__.py
     └── launch.py

你在運行l(wèi)aunch.py時報警conf這個module找不到,這個時候就應(yīng)該通過sys.append()命令把conf所在文件夾的路徑(注意是conf所在文件夾的路徑,不是conf的路徑),也就是 learn_python的根路徑添加到PYTHONPATH中,下面是實現(xiàn)方案的代碼。

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 *

os.path.abspath(file)獲取到的是launch.py的絕對路徑;os.path.dirname(os.path.abspath(file))獲取到的是launch.py所在文件夾的也就是server的根路徑

os.path.dirname(os.path.dirname(os.path.abspath(file)))獲取到的是server所在文件夾也就是learn_python的根路徑。

至此就獲取到了learn_pyhton的根路徑,使用sys.append()命令把路徑添加到環(huán)境變量中即可。

8、不恰當?shù)氖褂昧讼鄬?dǎo)入

python相對導(dǎo)入常見問題和解決方案

最后

當你排查完了以上所有情況,發(fā)現(xiàn)自己都不符合,而且在網(wǎng)上找了很多文章也沒找到解決方案,這個時候別獨自掙扎了,因為你很可能是犯了一個很低級小眾的錯誤,繼續(xù)獨自排查很難找到問題所在。最好讓身邊的同學(xué)幫你看一下,所謂當局者迷,旁觀者清,可能你看了很長時間卻沒關(guān)注到一些比較基礎(chǔ)且常見的設(shè)置,這時同事或者同學(xué)往往能很快看出你的問題所在。比如你可能一直以為你用的python3, 而實際上用的是python2等等。

到此這篇關(guān)于Python ModuleNotFoundError: No module named ‘xxx‘可能的解決方案大全的文章就介紹到這了,更多相關(guān)Python ModuleNotFoundError錯誤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python協(xié)程的四種實現(xiàn)方式總結(jié)

    Python協(xié)程的四種實現(xiàn)方式總結(jié)

    今天繼續(xù)給大家介紹Python關(guān)知識,本文主要內(nèi)容是Python協(xié)程的四種實現(xiàn)方式。文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • 利用Python如何實現(xiàn)K-means聚類算法

    利用Python如何實現(xiàn)K-means聚類算法

    聚類算法有很多種(幾十種),K-Means是聚類算法中的最常用的一種,算法最大的特點是簡單,好理解,運算速度快,下面這篇文章主要給大家介紹了關(guān)于利用Python如何實現(xiàn)K-means聚類算法的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Pycharm中如何編寫B(tài)ash批處理命令

    Pycharm中如何編寫B(tài)ash批處理命令

    這篇文章主要介紹了Pycharm中如何編寫B(tài)ash批處理命令,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python日志模塊logging的使用方法總結(jié)

    Python日志模塊logging的使用方法總結(jié)

    這篇文章主要分享的是Python日志模塊logging的使用方法總結(jié),ogging模塊默認級別是WARNING,意味著只會追蹤該級別以上的事件,除非更改日志配置,想了解更多相關(guān)資料的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • 使用Python繪制可愛的招財貓

    使用Python繪制可愛的招財貓

    招財貓,也被稱為“幸運貓”,是一種象征財富和好運的吉祥物,經(jīng)常出現(xiàn)在亞洲文化的商店、餐廳和家庭中,今天,我將帶你用 Python 和 matplotlib 庫從零開始繪制一只可愛的卡通招財貓,感興趣的小伙伴跟著小編一起來看看吧
    2025-01-01
  • Python OrderedDict的使用案例解析

    Python OrderedDict的使用案例解析

    這篇文章主要介紹了Python OrderedDict的使用案例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Django使用Mysql數(shù)據(jù)庫已經(jīng)存在的數(shù)據(jù)表方法

    Django使用Mysql數(shù)據(jù)庫已經(jīng)存在的數(shù)據(jù)表方法

    今天小編就為大家分享一篇Django使用Mysql數(shù)據(jù)庫已經(jīng)存在的數(shù)據(jù)表方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Django使用uwsgi部署時的配置以及django日志文件的處理方法

    Django使用uwsgi部署時的配置以及django日志文件的處理方法

    今天小編就為大家分享一篇Django使用uwsgi部署時的配置以及django日志文件的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 深度辨析Python的eval()與exec()的方法

    深度辨析Python的eval()與exec()的方法

    這篇文章主要介紹了深度辨析Python的eval()與exec()的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 關(guān)于numpy強制類型轉(zhuǎn)換的問題

    關(guān)于numpy強制類型轉(zhuǎn)換的問題

    這篇文章主要介紹了關(guān)于numpy強制類型轉(zhuǎn)換的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論

云安县| 迁西县| 中宁县| 和龙市| 海原县| 西盟| 永嘉县| 阜阳市| 深圳市| 桂东县| 云霄县| 山西省| 新源县| 陕西省| 白河县| 中江县| 南平市| 石柱| 娄底市| 满城县| 家居| 米易县| 杭锦旗| 泾阳县| 灵石县| 宝丰县| 乌兰察布市| 隆回县| 区。| 巨鹿县| 昭觉县| 闻喜县| 十堰市| 横山县| 肥乡县| 余姚市| 新乡市| 钟祥市| 广水市| 崇仁县| 上林县|