python 自定義包的呼叫

2021-08-28 22:11:37 字數 1829 閱讀 4681

首先需要說明模組便是最基本的.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基礎知識,發現我對包,庫,模組的定義非常模糊,於是我回頭看了一下基礎知識,也是一時興起想讓跟我一樣一開始有些困惑的人避坑!要想知道什麼是包,得先了解一下模組的概念!知道了模組,那緊接著看看包 上面是我...