為什麼說不能用import導入自定義的包?

聽別人說自定義的包要用from導入 不能用import?

另外,我自定義包里沒有添加__init__.py文件 但是還是可以正常導入啊 有什麼影響?


自定義的包可以用import導入,問題在於Python有一個搜索模塊的路徑,你需要讓Python知道你的模塊在哪。你可以把模塊放入這些路徑中,比如site-packges目錄下。也可以用from指定路徑。還可以使用sys.path.extend()擴展Python搜索模塊的路徑。

當包中沒有__init__文件時,它就成為了「命名空間包」,當Python的模塊搜索路徑中有相同名字的這樣的包時,Python會把它們都導入,並且當成一個模塊來對待,即使它們位於不同的目錄下。


Python中的package定義很簡單,其層次結構與程序所在目錄的層次結構相同,這一點與Java類似,唯一不同的地方在於,python中的package必須包含一個__init__.py的文件。

__init__.py可以為空,只要它存在,就表明此目錄應被作為一個package處理。

其實最主要還是要看路徑。import的時候。

在sys.path裡面找到通向模塊文件的路徑,

Python如何找到我們定義的module?
在標準包sys中path屬性記錄了Python的包路徑。
import sys
print(sys.path)
通常我們可以將module的包路徑放到環境變數PYTHONPATH中,該環境變數會自動添加到sys.path屬性.
另一種方便的方法是編程中直接指定我們的module路徑到sys.path 中。
常用的話也可以放在python36libsite-packages文件夾下。

看測試:

import sys
# print(sys.path)
import os
# print(os.getcwd())
sys.path.append(os.getcwd()+"\目錄")
# print(sys.path)
import 目錄下的模塊或py文件


沒有說不能吧,只是"建議"這種程度,自己的包有正常的包結構,那就跟第三方一樣了


用起來import可以正常使用,也不需要添加__init__.py文件,但切記不要和內置模塊重名...比如同一文件夾下有個文件命名成csv.py,然後import csv就是導入這個文件而不是內置的csv模塊了。

如果這樣做了就會報錯csv模塊沒有xx方法讓你懵比~~


package文件夾需要有__init__.py,這樣import package的時候,默認導入__init__.py,文件夾下其他的.py文件可以使用import A.B的方式,也可以直接import。關鍵在於Python PATH能否被搜索到。另外,不要覆蓋內置的包


沒有 不要重名就行


推薦閱讀:

TAG:Python | Python3x | Python入門 | Python使用技巧 | Python編程 |