1樓:北京刑事律師
包(packages)其實也是模組,其型別type也是module。通常引用自定義模組時有兩種方法:
1)將62616964757a686964616fe58685e5aeb931333363393130
兩個檔案放在同一目錄下。
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資料夾下。
2樓:盜墓者
自己寫的模組,要放在需要匯入檔案同一個目錄或者放在lib或者script目錄(預設的模組目錄)
然後,import 名字 就行。主要不要帶字尾,帶檔名就行
spark submit的時候怎麼匯入自己寫的依賴模組
前面已經有篇文章介紹如何編譯包含hive的spark assembly.jar了,不清楚的可以翻看一下前面的文章。cloudera manager裝好的spark,直接執行spark shell進入命令列後,寫入如下語句 val hivecontext new org.apache.spark.sq...
python for語句怎麼寫,python 如何用for迴圈 寫一個三角形?
用python的for迴圈實現等差序列相加,例如 1 2 3 4 5 20 這樣的演算法,如下 for i in range 10 print i python 如何用for迴圈 寫一個三角形?如下 for i in range 1,6 print 2 i 1 python for 迴圈語句流程圖 ...
python 3 2的乘法怎麼寫
我猜測,樓源主遇到的bai問題是 a raw input input a integer number input a integer number 32 print 4 a 32323232 這不du 是乘法的問題zhi 如果是這dao樣的問題,請這樣 a int raw input input ...