day23模塊

模塊:導入的兩種方式

不加__all__的情況:

加__all__的情況:

·總結:如果一個文件中有__all__變量,from?xxx?import?*時導入時,__all__['a','b']中括號里面的可以使用,其他的不能使用。

1.1python中的包


所以將其放到同一個文件夾下

使用import文件.模塊?的方式導入


使用from文件夾import模塊?的方式導入

在msg文件夾下創建__init__.py文件

在__init__.py文件中寫入

重新使用from文件夾import模塊?的方式導入

總結:

·包將有聯系的模塊組織在一起,即放到同一個文件夾下,并且在這個文件夾創建一個名字為__init__.py文件,那么這個文件夾就稱之為包。

有效避免模塊名稱沖突問題,讓應用組織結構更加清晰

1.1.1__init__.py文件有什么用

__init__.py控制著包的導入行為

1.1.1.1__init__.py為空

僅僅是把這個包導入,不會導入包中的模塊

1.1.1.2__all__

在__init__.py文件中,定義一個__all__變量,它控制著from包名import?*時導入的模塊。

__all__里面的可以導入,其他的導入不進去,相當于一種導入的過濾。

1.1.1.1以在__init__.py文件中編寫內容(導入會被自動調用)

可以在這個文件中編寫語句,當導入時,這些語句就會被執行

__init__.py文件


1.1.1擴展:嵌套的包

假定我們的包的例子有如下的目錄結構:

Phone/

__init__.py

common_util.py

Voicedta/

__init__.py

Pots.py

Isdn.py

Fax/

__init__.py

G3.py

Mobile/

__init__.py

Analog.py

igital.py

Pager/

__init__.py

Numeric.py

Phone是最頂層的包,Voicedta等是它的子包。?我們可以這樣導入子包:

import?Phone.Mobile.Analog

Phone.Mobile.Analog.dial()

你也可使用from-import實現不同需求的導入

第一種方法是只導入頂層的子包,然后使用屬性/點操作符向下引用子包樹:

from?Phone?import?Mobile

Mobile.Analog.dial('555-1212')

此外,我們可以還引用更多的子包:

from?Phone.Mobile?import?Analog

Analog.dial('555-1212')

事實上,你可以一直沿子包的樹狀結構導入:

from?Phone.Mobile.Analog?import?dial

dial('555-1212')

在我們上邊的目錄結構中,我們可以發現很多的__init__.py文件。這些是初始化模塊,from-import語句導入子包時需要用到它。?如果沒有用到,他們可以是空文件。

包同樣支持from-import?all語句:

from?package.module?import?*

然而,這樣的語句會導入哪些文件取決于操作系統的文件系統。所以我們在__init__.py中加入__all__變量。該變量包含執行這樣的語句時應該導入的模塊的名字。它由一個模塊名字符串列表組成.。

1.1模塊發布

1.mymodule目錄結構體如下:

.

├──?setup.py

├──?suba

│???├──?aa.py

│???├──?bb.py

│???└──?__init__.py

└──?subb

├──?cc.py

├──?dd.py

└──?__init__.py

2.編輯setup.py文件

py_modules需指明所需包含的py文件

fromdistutils.coreimportsetup

setup(name="yongGe",?version="1.0",?description="yongGe's?module",?author="yongGe",?py_modules=['suba.aa','suba.bb','subb.cc','subb.dd'])

3.構建模塊

python?setup.py?build

構建后目錄結構

├──?build

│???└──?lib.linux-i686-2.7

│???????├──?suba

│???????│???├──?aa.py

│???????│???├──?bb.py

│???????│???└──?__init__.py

│???????└──?subb

│???????????├──?cc.py

│???????????├──?dd.py

│???????????└──?__init__.py

├──?setup.py

├──?suba

│???├──?aa.py

│???├──?bb.py

│???└──?__init__.py

└──?subb

├──?cc.py

├──?dd.py

└──?__init__.py

4.生成發布壓縮包

python?setup.py?sdist

打包后,生成最終發布壓縮包yongGe-1.0.tar.gz?,目錄結構

├──?build

│???└──?lib.linux-i686-2.7

│???????├──?suba

│???????│???├──?aa.py

│???????│???├──?bb.py

│???????│???└──?__init__.py

│???????└──?subb

│???????????├──?cc.py

│???????????├──?dd.py

│???????????└──?__init__.py

├──?dist

│???└──?yongGe-1.0.tar.gz

├──?MANIFEST

├──?setup.py

├──?suba

│???├──?aa.py

│???├──?bb.py

│???└──?__init__.py

└──?subb

├──?cc.py

├──?dd.py

└──?__init__.py

1.2模塊安裝、使用

1.2.0.1安裝的方式

1.找到模塊的壓縮包

2.解壓

3.進入文件夾

4.執行命令python?setup.py?install

注意:如果在install的時候,執行目錄安裝,可以使用python?setup.py?install?--prefix=安裝路徑

·如果在install的時候,要安裝細節都寫到log里了,可以使用python?setup.py?install?--record=日志文件的名字。如果刪除cat?log|xagrs?rm-rf。也可以通過rm命令刪除。

1.2.0.2模塊的引入

在程序中,使用from?import即可完成對安裝的模塊使用

from模塊名import模塊名或者*

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.1.1定位模塊 當你導入一個模塊,Python解析器對模塊位置的搜索順序是: 1.當前目錄 2.如果不在當前目...
    盛夏光年_49e9閱讀 296評論 0 0
  • 1.1Python中的模塊介紹和使用 有過C語言編程經驗的朋友都知道在C語言中如果要引用sqrt函數,必須用語句#...
    TENG書閱讀 433評論 0 0
  • 用 python 解釋器來編程從 Python 解釋器退出再進入,那么你定義的所有的方法和變量就都消失了。 為此...
    chen_000閱讀 541評論 0 3
  • 目錄: 上一節課生成器還有一些知識點沒講到,接下來補充; 一、協程函數 生成器:yield關鍵字的另外一種用法yi...
    CaiGuangyin閱讀 623評論 0 1
  • 1.感恩大熊帶來的灌腸,很好吃,謝謝,謝謝,謝謝。 2.感恩豆漿機,每天打出熱騰騰香噴噴的豆漿,謝謝,謝謝,謝謝。...
    諾諾521閱讀 92評論 0 0