本文目錄一覽:
python如何導入自定義模塊
這個問題涉及到包和模塊管理。包名和模塊名一般是小寫。你的文件是下面的結構,需要創建空文件 b/__init__.py,將b目錄變成package。
a/a.py
from b.c import index
index()
b/c.py
def index():
print(“hello”)
b/__init__.py
a/a.py 裡面有兩種引用方式,相對引用和絕對引用:
# 如果a.py是 library,兩種引用方式都可以
from ..b.c import index
# 如果a.py是 executable,必須使用絕對引用
from b.c import index
如果使用絕對引用,需要確保b所在目錄在PYTHONPATH (sys.path)裡面,比如可以這樣執行:
env PYTHONPATH=. python a/a.py
python怎麼導入自己寫的包
包(packages)其實也是模塊,其類型Type也是module。通常引用自定義模塊時有兩種方法:
1)將兩個文件放在同一目錄下。
2)在sys.path下添加要引用的py文件的路徑。然後import。
這樣的做法,對於少數文件是可行的,但如果程序數目很多,層級很複雜時就比較麻煩了。此時用package就能將多個py文件組織起來,類似於第三方包一樣的引用。要方便很多。
package的層次結構與程序所在目錄的層次結構相同,且必須包含一個__init__.py的文件。__init__.py可以為空,只要它存在就表明此目錄被作為一個package處理。
package1/
__init__.py
subPack1/
__init__.py
module_11.py
module_12.py
module_13.py
subPack2/
__init__.py
module_21.py
module_22.py
……
__init__.py可以為空,只要它存在,就表明此目錄應被作為一個package處理。當然,__init__.py中也可以設置相應的內容。
好了,現在我們在module_11.py中定義一個函數:
def funA():
print “funcA in module_11”
return
一.引用模塊
在頂層目錄(也就是package1所在的目錄,當然也參考上面的介紹,將package1放在解釋器能夠搜索到的地方)運行python:
from package1.subPack1.module_11 import funcA
funcA()
funcA in module_11
這樣,我們就按照package的層次關係,正確調用了module_11中的函數。
二.使用通配符*,導入某個module中的所有元素
答案就在__init__.py中。我們在subPack1的__init__.py文件中寫
__all__ = [‘module_13’, ‘module_12’]
然後進入python
from package1.subPack1 import *
module_11.funcA()
Traceback (most recent call last):
File “”, line 1, in
ImportError: No module named module_11
也就是說,以*導入時,package內的module是受__init__.py限制的。
三.在package內部互相調用。
1.如果希望調用同一個package中的module,則直接import即可。也就是說,在module_12.py中,可以直接使用
import module_11
2.如果不在同一個package中,例如我們希望在module_21.py中調用module_11.py中的FuncA,則應該這樣:
from module_11包名.module_11 import funcA
四.Python如何找到我們定義的module?
在標準包sys中path屬性記錄了Python的包路徑。
import sys
print(sys.path)
通常我們可以將module的包路徑放到環境變量PYTHONPATH中,該環境變量會自動添加到sys.path屬性.
另一種方便的方法是編程中直接指定我們的module路徑到sys.path 中。
常用的話也可以放在python27\lib\site-packages文件夾下。
Python 調用自定義類
class_1.py與當前腳本放在同一目錄下,再試試from class_1 import MyClass
原創文章,作者:HFNCI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/315958.html