在Python3項目中出現import報錯怎么解決?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
一、同一目錄下的import
下面是我的文檔的結構:你可以看到在工程tfexe下,存在兩個文件夾一個是datasets,一個是parallel,dataset下還有一個in文件夾和一個out.py文件,in文件夾里面存在b.py和bb.py兩個文件。parallel文件夾下存在的是兩個文件a.py和aa.py。(推薦您先建立好這個結構)
a.py文件代碼:
def say_hello():
print("hello world!")aa.py文件代碼:你可以看到是調用a.py里面的函數say_hello(),但是在pycharm這里是報錯的,但是可運行,你可以設置將文件夾設置成source root就可以讓他不顯示錯誤了,但是無所謂啦!
import os
import sys
print("當前的工作目錄:",os.getcwd())
print("python搜索模塊的路徑集合:",sys.path)
from a import say_hello
say_hello()其他暫且無用,這里先不展示!
(1)pycharm運行結果
右擊aa.py,來運行,你會觀察到下面的結果:很顯然,我們的a.py成功的調用了aa.py文件的函數say_hello()。
你可以看到當前的工作目錄是什么,那就是aa.py文件所在的絕對地址。
關注重點,你可以看到Python搜索模塊的路徑集合,重點是前兩個,你看到在pycharm上直接run運行的,我們的搜索路徑有總的工程的絕對路徑還有運行的文件所在的路徑。

(2)命令行運行結果
需要你切換到parallel的文件夾下,然后運行aa.py,觀察可得這個結果也是正確的。
你看出與上面的區別了嗎?很顯然,當前的工作路徑全部都是一樣的,但是我們的Python的搜索模塊的路徑少了什么呀?觀察第二個,你會發現,哇哦,少了我的整個工程所在的絕對路徑。因為這里parallel的絕對路徑是存在的,所以在搜索a模塊的時候,發現是可以搜索到的,因為a就在parallel這個絕對路徑的下面,當然是可以搜索到的,但是如果你需要調用別的文件夾的東西呢?很顯然,這里就要出錯啦~詳見下一節

總結:import同一文件夾下的模塊是可以在pycharm還有命令行下都是可以運行的!
二、不同的目錄下的import
b.py文件的內容:
def say_goodbye():
print("goodbye!")bb.py文件的內容:
import os
import sys
print("當前的工作目錄:",os.getcwd())
print("python搜索模塊的路徑集合",sys.path)
#引入同一文件夾下的模塊
from b import say_goodbye
say_goodbye()
# #引入與本文件夾同級的文件夾
# from in2 import c
# c.say()
#引入與本文件夾的上級文件夾同一級的文件夾下的模塊
from parallel import a
a.say_hello()c.py的文件內容:
def say():
print("say yes")(1)pycharm運行結果
你會發現,在pycharm上import不同文件夾下的模塊居然成功了,這是為什么呢?你看Python的搜索模塊的路徑出來的結果,里面包含了,我這個總的工程tfexe的絕對路徑,所以在引入parallel的時候自然是成功的,因為parallel在我們的搜索路徑上。所以我推測啊,pycharm自動的將整個工程的絕對路徑加入sys.path,也就是Python的模塊搜索路徑!

但是你肯定看到了我注釋掉了那個進入in2模塊的,為什么注釋掉,因為跑不通啊,為什么跑不通呢?因為in2模塊,沒有搜到,很尷尬呀~那沒搜到肯定是因為我的Python的搜索路徑不包含這里,仔細觀察結果,你發現只有tfexe的絕對路徑和in的絕對路徑,in2確實不在,怎么處理,把它加上絕對路徑不就好了!

加上能夠搜索到in2的絕對路徑:那不就是datasets的絕對路徑嘛!
在上面的bb.py里面添加上代碼
#-----這里是加上in2的絕對路徑的操作代碼------
sys.path.append("/home/syq/PycharmProjects/tfexe/datasets")
從運行結果來看,你會發現居然都成功了,這都歸功于sys.path!
(2)命令行運行結果
很顯然啊,這里報錯了,為什么呢?他說模塊parallel不存在,為什么明明之前的在pycharm上可以運行在這里不行了呢?
我們在命令行運行注釋掉in2的那個部分的代碼,也就是(1)里面的未更改之前的bb.py的代碼:為了防止大家搞混,我在這里在貼一下bb.py的代碼:
import os
import sys
print("當前的工作目錄:",os.getcwd())
print("python搜索模塊的路徑集合",sys.path)
#引入同一文件夾下的模塊
from b import say_goodbye
say_goodbye()
# #引入與本文件夾同級的文件夾
# from in2 import c
# c.say()
#引入與本文件夾的上級文件夾同一級的文件夾下的模塊
from parallel import a
a.say_hello()結果:觀察到報錯了,報錯parallel這個模塊居然不存在,很顯然觀察sys.path的輸出,你發現少了之前的tfexe的絕對路徑,這就是parallel找不到的原因,因為他壓根不在搜索路徑上,所以這里我在bb.py的代碼基礎上添加上能夠搜到parallel的搜索路徑。

修改后的bb.py的代碼:
import os
import sys
print("當前的工作目錄:",os.getcwd())
sys.path.append("/home/syq/PycharmProjects/tfexe")
print("python搜索模塊的路徑集合",sys.path)
#引入同一文件夾下的模塊
from b import say_goodbye
say_goodbye()
# #引入與本文件夾同級的文件夾
# from in2 import c
# c.say()
#引入與本文件夾的上級文件夾同一級的文件夾下的模塊
from parallel import a
a.say_hello()代碼運行結果:注意我把未改之前的bb.py的運行結果也放在了這里,你可以觀察到兩者的差別所在,你就會發現,哦原來啊,下面的sys.path比更改之前的path多了一個可以搜索到parallel的絕對路徑了,很顯然就能成功的運行了!

現在你差不多懂了吧,當你遇到了import的錯誤,你只需要輸出sys.path來看看能不能搜索到你要加入的模塊,如果不行就自己手動的添加!
在引入in2模塊試試看!
bb.py文件的內容:
import os
import sys
print("當前的工作目錄:",os.getcwd())
sys.path.append("/home/syq/PycharmProjects/tfexe")
sys.path.append("/home/syq/PycharmProjects/tfexe/datasets")
print("python搜索模塊的路徑集合",sys.path)
#引入同一文件夾下的模塊
from b import say_goodbye
say_goodbye()
#引入與本文件夾同級的文件夾
from in2 import c
c.say()
#引入與本文件夾的上級文件夾同一級的文件夾下的模塊
from parallel import a
a.say_hello()不管是在命令行還是pycharm都是可以得到結果的!

看完上述內容,你們掌握在Python3項目中出現import報錯怎么解決的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。