首先需要說明模組便是最基本的.py檔案,package是含有__init__.py的資料夾,單獨的資料夾本身不含__init__.py。
調包的時候首先會執行__init__.py檔案。
下面進行舉例說明:
1. 以資料夾的方式匯入
從上圖,可以看出testinitpackage、subdir1、testdir均為資料夾, subdir2為package。
myfunction1.py 的程式
def func1():
print('subdir1')
myfunction2.py 的程式
def func2():
print('subdir2')
假設主程式為test.py,想要呼叫myfunction1.py中的func1(), 此時發現要呼叫的**段的位置和myfunction1.py並不在同一級目錄下,所以這裡涉及到了python的搜尋路徑的問題,需要新增subdir1的路徑到搜尋路徑中,**如下:
import os
import sys
abspath = os.path.abspath(__file__) #返回**段所在的位置,肯定是在某個.py檔案中
tempath = os.path.dirname(abspath) #往上返回一級目錄,得到檔案所在的路徑
tempath = os.path.dirname(tempath) #在往上返回一級,得到資料夾所在的路徑
#sys.path.insert(0, tempath) #也可以使用這種方式,確定tmppath為最高端搜尋路徑
此時要想到用func1() 函式可以用以下方式
from subdir1 import myfunction1
myfunction1.func1()
#或者from subdir1.myfunction1 import func1
func1()
這裡subdir1並不是package但是卻可以使用『.』的方式,沒有搞清楚為什麼可以。
2. 以package的方式匯入 func2
import subdir2
subdir2.myfunction2.func2()
或者前面的方式也可以,這裡的區別是可以單獨使用subdir2.myfunction2.func2(), 當使用subdir1.myfunction1.func1() 會報錯。
from subdir2 import myfunction2
myfunction2.func2()
#或者from subdir2.myfunction2 import func2
func2()
3. 終極大招
將工程在資料夾變為package,即新增__init__.py檔案
即可以直接將工程所在的路徑加入搜尋路徑,然後從上往下呼叫。
python匯入自定義包
在python導包的時候有三條鐵規 1.嚴格區分包和資料夾。包的定義就是包含 init py的資料夾。如果沒有 init py,那麼就是普通的資料夾。2.匯入package。在python 安裝目錄的site package資料夾中新建 pth,內容是需要匯入的package所在的資料夾路徑。3.匯...
python 自定義pip包
我的是 daysn daysn test.py init.py 記得加init.py啊,不加生成個鬼 setup.py 首先是test.py 然後setup.py coding utf 8 from setuptools import setup,find packages setup name d...
Python3中自定義包和匯入自定義包
第一篇部落格,寫得質量可能會不高,但希望能開個好頭,努力成為優秀的程式設計師!今天在惡補python基礎知識,發現我對包,庫,模組的定義非常模糊,於是我回頭看了一下基礎知識,也是一時興起想讓跟我一樣一開始有些困惑的人避坑!要想知道什麼是包,得先了解一下模組的概念!知道了模組,那緊接著看看包 上面是我...