在計算機程序開發過程中,隨着程序代碼越來越多,在一個文件裏的代碼越來越多,越來越不容易維護
爲了編寫可以維護的代碼,我們把很多模塊分組,分別放在不同的文件裏,這樣每個文件裏面包含的代碼就相對的少
在Python中,每個.py就是一個模塊(module)
優點
- 提高了代碼的可維護性
- 每個模塊都是可重用的
- 避免函數名和變量名衝突
模塊分爲三類
- 內置模塊
- 第三方模塊
- 自定義模塊
導入模塊
#導入xxx模塊
import xxx
#從xxx導入xx
from xxx import xx
#起別名x
from xxx import xx as x
#將xxx模塊全部導入,調用時不需要xxx.了(不推薦使用)
from xxx import *
安裝第三方模塊
pip install xxx
卸載第三方模塊
pip uninstall xxx
默認會使用python官方服務器下載,速度比較慢,可以改用國內的源
(從豆瓣安裝並將該網址信任)
pip install -i http://pypi.douban.com/simple xxx --trusted-host pypi.douban.com
包
當你的模塊越來越多,就需要對模塊進行劃分,根據不同的功能分爲多個目錄,一個目錄管理多個模塊文件,這個目錄稱爲包
包裏面應該有一個__init__.py文件,用於告訴python解析器這是一個包,
示例
#文件路徑
imports
---text
---__init__.py
---text1.py
---proj
---__init__.py
---proj1.py
---模塊.py
在模塊.py中導入text1.py文件
from text import text1
在text1.py中導入proj.py文件
import sys
print(sys.path). #打印python的環境變量,第一個''是當前目錄
sys.path.append('/Users/sunlizhao/PycharmProjects/imports') #將目錄路徑寫入到環境變量中(當前文件有效)
print(sys.path)
現在就可以在text1.py中導入proj.py文件了
from proj import proj1.py
但是這樣就把路徑給寫死,如果項目更換平臺就會報錯
獲取當前文件路徑
print(__file__)
#/Users/sunlizhao/PycharmProjects/imports/text/text1.py
但是我們只想獲取到imports目錄這一層
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
print(BASE_DIR)
#/Users/sunlizhao/PycharmProjects/imports
發現這樣就向上了兩層目錄
然後將目錄添加到環境變量
sys.path.append(BASE_DIR)
print(sys.path)
這樣在pycharm中成功了,但是在終端中很可能會失敗,找了一下原因__file__還不是絕對路徑
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
from proj import proj1
相對路徑(路徑關係比較嚴格,不常用)
相對路徑往上翻不能到程序的目錄,在這個例子中,就是不能到imports目錄
這樣就需要重新更改一下目錄結構
imports
---tete
---text
---__init__.py
---text1.py
---proj
---__init__.py
---proj1.py
---模塊.py
在text1.py中導入proj1.py文件
from ..proj import proj1