python模塊導入
A. 怎麼從python引入自己的模塊
1.如果導入的模塊和主程序在同個目錄下,直接import就行了
2.如果導入的模塊是在主程序所在目錄的子目錄下,可以在子目錄中增加一個空白的__init__.py文件,該文件使得python解釋器將子目錄整個也當成一個模塊,然後直接通過「import 子目錄.模塊」導入即可。
3.如果導入的模塊是在主程序所在目錄的父目錄下,則要通過修改path來解決,有兩種方法:
(1)通過」import sys,sys.path.append('父目錄的路徑')「來改變,這種方法屬於一次性的,只對當前的python解釋器進程有效,關掉python重啟後就失效了。
(2)直接修改環境變數:在windows中是 「 set 變數=『路徑』 」 例如:set PYTHONPATH=『C:\test\...』 查看是否設置成功用echo %PYTHONPATH%,而且進到python解釋器中查看sys.path,會發現已經有了新增加的路徑了。這種方式是永久的,一次設置以後一直都有效。在linux中是 "export 變數=『路徑』 「,查看是" echo $變數 "
通過修改path是通用的方法,因為python解釋器就是通過sys.path去一個地方一個地方的尋找模塊的。
B. 如何導入其他位置的python模塊
import sys
print sys.path
上面的代碼會給出所有可用的python路徑,你把.py文件放到這些路徑下面就可以在其他文件里導入它了。
另外一個特殊的路徑就是當前路徑,比如你在一個文件夾test下新建兩個.py文件,分別為123.py 和456.py ,那麼你可以在123.py寫:
1
import 456
就可以導入456.py了。
python的模塊都是.py文件,提示invaild syntax 是說語法錯誤。如果你用的是python3,那你的print就寫錯了。python2和3的print 區別如下。
1
2
print 'hello world' #python2
print('hello world') #python3
C. python 模塊可以相互導入嗎
模塊A中import B,而在模塊B中import A。這時會怎麼樣呢?這個在Python列表中由RobertChen給出了詳細解釋,抄錄如下:[A.py]
from B import D
class C:pass
[B.py]
from A import C
class D:pass
為什麼執行A的時候不能載入D呢?
如果將A.py改為:import B就可以了。
這是怎麼回事呢?
RobertChen:這跟Python內部import的機制是有關的,具體到from B import D,Python內部會分成幾個步驟:
在sys.moles中查找符號"B"
果符號B存在,則獲得符號B對應的mole對象<mole B>。
從<mole B>的__dict__中獲得符號"D"對應的對象,如果"D"不存在,則拋出異常
如果符號B不存在,則創建一個新的mole對象<mole B>,注意,這時,mole對象的__dict__為空。
執行B.py中的表達式,填充<mole B>的__dict__ 。
從<mole B>的__dict__中獲得"D"對應的對象,如果"D"不存在,則拋出異常。
所以,這個例子的執行順序如下:
1、執行A.py中的from B import D
由於是執行的python A.py,所以在sys.moles中並沒有<moleB>存在,首先為B.py創建一個mole對象(<moleB>),注意,這時創建的這個mole對象是空的,里邊啥也沒有,在Python內部創建了這個mole對象之後,就會解析執行B.py,其目的是填充<mole B>這個dict。
2、執行B.py中的from A import C
在執行B.py的過程中,會碰到這一句,首先檢查sys.moles這個mole緩存中是否已經存在<moleA>了,由於這時緩存還沒有緩存<moleA>,所以類似的,Python內部會為A.py創建一個mole對象(<moleA>),然後,同樣地,執行A.py中的語句。
3、再次執行A.py中的from B import D
這時,由於在第1步時,創建的<moleB>對象已經緩存在了sys.moles中,所以直接就得到了<moleB>,但是,注意,從整個過程來看,我們知道,這時<moleB>還是一個空的對象,裡面啥也沒有,所以從這個mole中獲得符號"D"的操作就會拋出異常。如果這里只是importB,由於"B"這個符號在sys.moles中已經存在,所以是不會拋出異常的。
上面的解釋已經由Zoom.Quiet收錄在啄木鳥了,裡面有圖,可以參考一下:
D. python導入模塊問題
其實很簡單,這是命名空間的問題,每個模塊或者一個包就是一個命名空間,每個都相對獨立的,只有導入時才會有某種關系存在。
也就是說,如果你在connect.py文件里沒有導入time模塊,使用的話本來就會提示time沒有定義(因為你事先沒有導入嘛)。然後當程序運行時,會優先把模塊和定義的函數先走一遍存在緩存里(你可以理解為檢測一篇),然後再按照代碼順序由上而下運行。所以當程序優先運行模塊和定義的函數時,發現你的connect.py報錯,那麼後面與這個函數或者模塊相關的代碼都不會再繼續運行。
所以你在connect.py的文件里import time,而主py文件不需要導入time模塊就行。
E. 如何導入文件模塊 python
python是由一系列的模塊組成的,每個模塊就是一個py為後綴的文件,同時模塊也是一個命名空間,從而避免了變數名稱沖突的問題。模塊我們就可以理解為lib庫,如果需要使用某個模塊中的函數或對象,則要導入這個模塊才可以使用,除了系統默認的模塊(內置函數)不需要導入外。
2
在python中常用import或者from...import來導入相應的模塊。模塊一些函數和類的集合文件,並實現一定的功能,當我們需要使用這些功能的時候,可以直接把相應的模塊導入到我們的程序中,類似C語言中的include頭文件。輸入模塊的方法如下所示:
3
import:
import mode #導入mode模塊
print('=======Python import mode===============');
print ('The command line arguments are:')
for i in mode.argv:
print (i)
print ('\n The python path',mode.path)
即導入mode模塊後,使用mode.***即可使用mode模塊中的***方法,函數等。
4
from...import...:
from mode import argv,path #從mode中導入特定的成員
print('========python from import============')
print('path:',path)
即使用from mode import argv即可直接調用mode模塊中argv函數,方法等
5
簡單的說,使用第二種方法導入模塊,那麼調用模塊中的函數的時候就不需要輸入模塊名稱即可直接調用了。
具體的實例可以參見如下兩種情況:
6
另外,還有一種'from...import...as...'的導入方法。這樣調用模塊中的函數的時候,可以用自己想要的名字來替代該函數名了,如下圖中,即用'haha'來替代了'urlopen'這個函數:
7
總結:
導入mode模塊,import與from…import的不同之處在於:
如果你想要直接輸入argv變數到你的程序中而避免每次調用都輸入mode,
則可使用:from mode import arg
一般說來,應該避免使用from..import而使用import來增加程序的可讀性,也可以避免名稱的沖突。
F. 如何導入python中的模塊
定義模塊,只要使用文本編輯器,把一些python代碼輸入到文本中,然後以.py為後綴名進行保存,任何此類文件都會被認為是python模塊。
比如說,下面的代碼輸入到一個文件中,就可以看作是一個模塊:
def printme(var): print varif __name__ == '__main__': printme(1)
假設說輸入到a.py中,那麼import a就可以把這個模塊導入。
然後可執行a.printme(3),屏幕即可列印出3:
>>> a.printme(3)3>>>
一個模塊頂層定義的變數,會自動變成模塊的屬性。例如:
data=[1,2,3]def printme(var): print varif __name__ == '__main__': printme(1)
data變數就是模塊的一個屬性。其實printme也是一個屬性,只不過是一個函數罷了。
引入模塊示例如下:(假定此時data=[1,2,3]未定義)
>>> import a>>> a.data Traceback (most recent call last): File "<pyshell#1>", line 1, in <mole> a.dataAttributeError: 'mole' object has no attribute 'data'>>> reload(a)<mole 'a' from 'C:/py\a.pyc'>>>> a.data Traceback (most recent call last): File "<pyshell#3>", line 1, in <mole> a.dataAttributeError: 'mole' object has no attribute 'data'>>>
從上述提示可以看出data屬性未定義,此時再在a.py文件中定義data=[1,2,3],重新載入a模塊,並輸出data屬性:
>>> reload(a)<mole 'a' from 'C:/py\a.py'>>>> a.data[1, 2, 3]>>>
這里的reload函數可以重新載入一個模塊。如果在模塊代碼中更改了,那麼需要重新載入。
上面a.data,就是訪問模塊中的屬性。
上面的例子是導入一個文件作為一個模塊。
其實python的模塊導入還有更豐富的內容。
除了模塊名之外,python也可以導入指定目錄路徑。python代碼的目錄就稱為包。因此,這類導入就稱為包導入。事實上,包導入是把計算機上的目錄變成python的一個命名空間。而屬性就是目錄中包含的子目錄或者是模塊文件。
看下面例子:
在我的桌面上有一個aa文件夾,裡面有bb文件夾,bb裡面有a.py這個文件。
那麼在aa和bb文件夾中分別放置一個__init__.py,之後,在命令行中import aa.bb.a,就可以導入模塊a了。
G. python 導入模塊
在文件夾a的下面,新建一個__init__.py的py文件,
然後添加ab文件路徑為系統路徑:sys.path.append(ab文件路徑)
最後利用:from a import a即可。
H. python 中庫怎麼導入
讓包內導入更加顯式,這個功能的一部分設計初衷是,為了幫助腳本解決同名文件出現在模塊搜索路徑上多個不同位置時的二義性。考慮包目錄,這定義了一個名為mypkg 的包,其中含有名為mypkg.main和mypkg.string 的模塊。現在,假設模塊main試圖導入名為string的模塊。在 Python 2.X和更早版本中,Python會先尋找mypkg目錄以執行相對導入。這會找到並導入位於該處的string.py文件,將其賦值給mypkg.main模塊命名空間內的名稱string。不過,這一導入的本意可能是要導入Python標准庫的string模塊。可惜的是,在這些Python版本中,無法直接忽略mypkg.string 去尋找位於模塊搜索路徑更右側的標准庫中的string模塊。此外,我們無法使用完整包導入路徑來解決這個問題,因為我們無法依賴在每台機器上的標准鏈接庫路徑。換句話說,包中的簡單導入可能具有二義性而且容易出錯。在包內,我們無法確定imports pam語句指的是包內的模塊還是包外的模塊。一種可能的後果是,一個局部的模塊或包會在不經意間隱藏了sys.path 上的另一個模塊。
在實踐中,Python使用者可以避免為他們自己的模塊重復使用標准庫模塊的名稱(如果需要標准string庫,就不要把新的模塊命名為string)。但是,一個包還是有可能意外地隱藏標准庫模塊。再者,Python 以後可能新增標准庫模塊,而其名稱可能剛好就和自己的一個模塊同名。而依賴於沒有點號開頭相對導入的程序代碼同樣也不容易理解,因為讀者可能對希望使用哪個模塊而感到困惑。所以我們最好能在代碼中顯式地指出導入的解析過程。
I. 詳解Python中import方法引入模塊
在python用import或者from...import或者from...import...as...來導入相應的模塊,作用和使用方法與C語言的include頭文件類似。其實就是引入某些成熟的函數庫和成熟的方法,避免重復造輪子,提高開發速度。
python的import方法可以引入系統的模塊,也可以引入我們自己寫好的共用模塊,這點和php非常相似,但是它們的具體細節還不是很一樣。因為php是在引入的時候指明引入文件的具體路徑,而python中不能夠寫文件路徑進行引入。
下面總結一下import的幾種情況:
python包含子目錄中的模塊方法比較簡單,關鍵是能夠在sys.path裡面找到通向模塊文件的路徑。
下面將具體介紹幾種常用情況:
(1)主程序與模塊程序在同一目錄下:
如下面程序結構:
`-- src
|-- mod1.py
`-- test1.py
若在程序test1.py中導入模塊mod1, 則直接使用import mod1或from mod1 import *;
(2)主程序所在目錄是模塊所在目錄的父(或祖輩)目錄
如下面程序結構:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
`-- test1.py
若在程序test1.py中導入模塊mod2, 需要在mod2文件夾中建立空文件__init__.py文件(也可以在該文件中自定義輸出模塊介面); 然後使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序導入上層目錄中模塊或其他目錄(平級)下的模塊
如下面程序結構:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
|-- sub
| `-- test2.py
`-- test1.py
若在程序test2.py中導入模塊mod1和mod2。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立該文件。然後調用方式如下:
下面程序執行方式均在程序文件所在目錄下執行,如test2.py是在cd sub;之後執行python test2.py
而test1.py是在cd src;之後執行python test1.py; 不保證在src目錄下執行python sub/test2.py成功。
import sys
sys.path.append("..")
import mod1
import mod2.mod2
J. python怎麼導入同一包的模塊
一、何為模塊
1.一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的後綴。
2.模塊目的和函數,對象等一樣,是為了代碼的復用性而存在的。即一個py程序寫了很多功能,也可以被其他py程序調用。被調用後被作為模塊,此時會產生一個pyc的文件即為這個模塊的緩存文件,相當於編譯了模塊文件使該py模塊被調用的速度變快。一個大的項目一個人肯定是不行的,所以模塊也為程序員相互間的合作提供了便利。
二、模塊妙用
1.import
只需要在py程序開頭加上import 文件名(不能有.py後綴)。例如,模塊的文件名是span.py,那麼只需在自己的py程序加import span。
2. import可以在程序的任意位置調用,但一次調用後會駐留內存,下次再調用會直接調用內存中的模塊(python的優化)。
3.個模塊都是一個獨立的名稱空間,定義在這個模塊中的函數,把這個模塊的名稱空間當做全局名稱空間,這樣我們在編寫自己的模塊時,就不用擔心我們定義在自己模塊中全局變數會在被導入時,與使用者的全局變數沖突。
print('from the spam.py')
money=1000def read1(): print('spam->read1->money',1000)def read2(): print('spam->read2 calling read')
read1()def change(): global money
money=0
支持tab自動補全