Python3匯入自定義模組的三種方法詳解

2022-10-04 20:00:14 字數 3010 閱讀 7843

前話

模組在電腦程式的開發過程中,隨著程式**越寫越多,在乙個檔案裡**就會越來越長,越來越不容易維護。

為了編寫可維護的**,我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的**就相對較少,很多程式語言都採用這種組織**的方式。在python中,乙個.py檔案就稱之為乙個模組(module)。

使用模組有什麼好處?

最大的好處是大大提高了**的可維護性。其次,編寫**不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括python內建的模組和來自第三方的模組。

使用模組還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但是也要注意,盡量不要與內建函式名字衝突。點這裡檢視python的所有內建函式。

你也許還想到,如果不同的人編寫的模組名相同怎麼辦?為了避免模組名衝突,python又引入了按目錄來組織模組的方法,稱為包(package)。

舉個例子,乙個abc.py的檔案就是乙個名字叫abc的模組,乙個xyz.py的檔案就是乙個名字叫xyz的模組。

現在,假設我們的abc和xyz這兩個模組名字與其他模組衝突了,於是我們可以通過包來組織模組,避免衝突。方法是選擇乙個頂層包名,比如mycompany,按照如下目錄存放:

mycompany

├─ __init__.py

├─ abc.py

└─ xyz.py

引入了包以後,只要頂層的包名不與別人衝突,那所有模組都不會與別人衝突。現在,abc.py模組的名字就變成了mycompany.abc,類似的,xyz.py的模組名變成了mycompany.xyz。

請注意,每乙個包目錄下面都會有乙個__init__.py的檔案,這個檔案是必須存在的,否則,python就把這個目錄當成普通目錄,而不是乙個包。__init__.py可以是空檔案,也可以有python**,因為__init__.py本身就是乙個模組,而它的模組名就是mycompany。

類似的,可以有多級目錄,組成多級層次的包結構。比如如下的目錄結構:

mycompany

├─ web

│  ├─ __init__.py

│  ├─ utils.py

│  └─ www.py

├─ __init__.py

├─ abc.py

└─ xyz.py

檔案www.py的模組名就是mycompany.web.www,兩個檔案utils.py的模組名分別是mycompany.utils和mycompany.web.utils。

自己建立模組時要注意命名,不能和python自帶的模組名稱衝突。例如,系統自帶了sys模組,自己的模組就不可命名為sys.py,否則將無法匯入系統自帶的sys模組。

mycompany.web也是乙個模組,請指出該模組對應的.py檔案。

小結模組是一組python**的集合,可以使用其他模組,也可以被其他模組使用。

建立自己的模組時,要注意:

模組是個好東西啊,大牛們開源共享許多模組也加快了大家開發的速度,許多開源模組可以在這裡找到 ↓

因為剛入門所有有很多細節不懂,在網上搜尋資料的時候發現各位大神們的教程實在太過於精簡,讓我這個菜鳥很辛苦的才操作成功。

因此在這裡記錄下來。

開始第一種,直接 import

這裡有個大前提,就是你的py執行檔案和模組同屬於同個目錄(父級目錄),如下圖:

我把pwcong模組提供的函式寫在 __init__.py 裡,裡程式設計客棧麵只提供乙個 hi 函式:

# pwcong 模組的 __init__.py

# -*- coding: utf-8 -*-

def hi():

print("hi")

執行檔案main.py直接import模組:

# main.py

# -*- coding: utf-8 -*-

import pwcong

pwcong.hi()

接著我們執行一下main.py可以看到命令列視窗輸出了一句 hi ,第一種方式完成。

使用模組方式為:先導入-》接著輸入模組.變數|函式, 如上面例子的 pwcong.hi()

第二種,通過sys模組匯入自定義模組的path

如果執行檔案和模組不在同一目錄,這時候直接import是找不到自定義模組的。如下圖:

sys模組是python內建的,因此我們匯入自定義模組的步驟如下:

這時候 main.py 這樣寫:

# main.py

# -*- coding: utf-8 -*-

import sys

sys.path.append(r"c:\users\pwcong\desktop\python")

import pwcong

pwcong.hi()

最後執行main.py檔案,最終輸出 hi ,第二種方式完成。

第三種,通過pt**件找到自定義模組

這個方法原理就是利用了系統變數,python會掃瞄path變數的路徑來匯入模組,可以在系統path裡面新增。但是我還是推薦使用pt**件新增。

模組和執行檔案目錄結構跟上圖一樣:

我們建立乙個 module_pwcong.pth 檔案,裡面內容就是 pwcong模組所在的目錄:

c:\users\pwcong\desktop\python

將該 module_pwcong.pth 檔案hakmjsthk放到這裡:

python安裝目錄\python35\lib\site-packages

例如程式設計客棧我的:

然後 main.py 匯入並使用自定義模組:

# -*- coding: utf-8 -*-

import pwcong

pwcong.hi()

最後執行 main.py 檔案,可以輸出 hi ,第三種方式完成。

結束到這裡三種匯入自定義模組的方式栗子就完成了,我寫的應該很詳細了吧 :)

本文標題: python3匯入自定義模組的三種方法詳解

本文位址: /jiaoben/python/225170.html

解決python3 匯入自定義模組失敗

執行 python test.py 返回結果 traceback most recent call last file test.py line 2,in from src import test src importerror no module named src import模組的查詢模組的順...

python匯入自定義模組

原文章路徑 上網查了下資料和自己實驗了下,有幾個方法 1.如果匯入的模組和主程式在同個目錄下,直接import就行了 2.如果匯入的模組是在主程式所在目錄的子目錄下,可以在子目錄中增加乙個空白的 init py檔案,該檔案使得python直譯器將子目錄整個也當成乙個模組,然後直接通過 import ...

Python匯入自定義模組

第一種 這裡有個大前提,就是你的py執行檔案和模組同屬於同個目錄 父級目錄 如下圖 function和dataprepare在同乙個目錄下,則可以在dataprepare中直接import 呼叫如下 from function import 第二種 執行的py檔案和模組在不同目錄下 執行檔案main...