ref:
https://python3-cookbook.readthedocs.io/zh_CN/latest/chapters/p10_modules_and_packages.html
https://blog.csdn.net/u010013191/article/details/89071785
目錄
之前代碼都是在一個文件中編寫運行,最近編寫的代碼涉及功能較多,需要模塊化處理,涉及不同文件間的調用
簡單學習了下 在pycharm中調用不同文件代碼 ,做以下整理:
模塊、包、庫:
模塊:可以理解爲代碼文件,即各種py文件,模塊中包括類、函數
包:即多個模塊/代碼文件的組合,包括多個文件或者文件夾,文件夾可以看做子包;一般爲個人寫的代碼項目
庫:已發佈的包括某種特定功能的模塊/代碼文件的組合;一般爲其他組織或個人編寫的代碼項目
同文件夾內調用模塊
根目錄make sources root, 模塊名 直接引用
文件結構:
根目錄爲test,
文件包括hi.py、test_f.py
功能及目的:
hi.py定義了簡單的函數sayhi,打印 hi 字符串,可以被其他文件調用
test_f.py實現同文件夾下的調用
實現過程:
1)設置根目錄爲Sources root
右擊根目錄,mark dirctory as -- Sources Root;
2)import代碼
各文件代碼如下:
hi.py
def sayhi():
print('hi')
test_f.py
import hi
hi.sayhi()
注意事項:
- 文件名與文件夾名不要以數字開頭
- 文件名不要與文件夾名重名
跨文件夾調用模塊:
根目錄make sources root, 建立__init__.py,使用根目錄名.子包名.模塊名的 絕對路徑方式引用
文件結構:
根目錄爲test,
二級目錄及文件包括test_a、test_b、__init__.py、test_c.py
三級文件包括test_a下的__init__.py、hi.py、test_a.py;test_b下的__init__.py、test_b.py;
功能及目的:
hi.py定義了簡單的函數sayhi,打印 hi 字符串,可以被其他文件調用
各個__init__.py用於定義模塊包,如果想調用目錄x中的代碼,就在目錄x下建立空的__init__.py文件
- test_a.py實現同目錄下的調用
- test_b.py實現不同目錄下文件的調用
- test_c.py實現同級文件夾下的調用
實現過程:
1)設置根目錄爲Sources root
右擊根目錄,mark dirctory as -- Sources Root;
相當於在系統路徑中加入根目錄,當import時,可以檢索根目錄中內容;
類似於sys.path.append(path)
2)建立__init__.py
__init__.py用於定義模塊包,如果想調用目錄中的代碼,就在目錄下建立__init__.py文件吧;
目前涉及內容不多,建立空文件即可
3)在其他文件中import代碼
在本文中,在test_a.py、test_b.py、test.py中分別調用hi.py中代碼,各文件代碼如下:
hi.py
def sayhi():
print('hi')
test_a.py
from test.test_a import hi
hi.sayhi()
test_b.py
from test.test_a import hi
hi.sayhi()
test_c.py
from test.test_a import hi
hi.sayhi()
注意事項:
- 文件名與文件夾名不要以數字開頭
- 文件名不要與文件夾名重名
- 使用. 或者..的相對路徑方式進行引用,在編寫代碼時不報錯,但運行時可能出錯,建議使用 根目錄名.子包名.模塊名 的絕對路徑方式進行引用