python中,每個(gè)py文件被稱之為模塊功咒,每個(gè)具有__init__.py文件的目錄被稱為包愉阎。只要模
塊或者包所在的目錄在sys.path中绞蹦,就可以使用import 模塊或import 包來使用
如果你要使用的模塊(py文件)和當(dāng)前模塊在同一目錄力奋,只要import相應(yīng)的文件名就好,比
如在a.py中使用b.py:
import b
但是如果要import一個(gè)不同目錄的文件(例如b.py)該怎么做呢幽七?
首先需要使用sys.path.append方法將b.py所在目錄加入到搜素目錄中景殷。然后進(jìn)行import即
可,例如
import sys
sys.path.append('c:\xxxx\b.py') # 這個(gè)例子針對(duì) windows 用戶來說的
大多數(shù)情況,上面的代碼工作的很好猿挚。但是如果你沒有發(fā)現(xiàn)上面代碼有什么問題的話咐旧,可要
注意了,上面的代碼有時(shí)會(huì)找不到模塊或者包(ImportError: No module named
xxxxxx)绩蜻,這是因?yàn)椋?/p>
sys模塊是使用c語言編寫的铣墨,因此字符串支持 '\n', '\r', '\t'等來表示特殊字符。所以
上面代碼最好寫成:
sys.path.append('c:\\xxx\\b.py')
或者sys.path.append('c:/xxxx/b.py')
這樣可以避免因?yàn)殄e(cuò)誤的組成轉(zhuǎn)義字符办绝,而造成無效的搜索目錄(sys.path)設(shè)置伊约。
sys.path是python的搜索模塊的路徑集,是一個(gè)list
可以在python 環(huán)境下使用sys.path.append(path)添加相關(guān)的路徑孕蝉,但在退出python環(huán)境后
自己添加的路徑就會(huì)自動(dòng)消失了屡律!
3、搜索路徑和路徑搜索
模塊的導(dǎo)入需要叫做“路徑搜索”的過程降淮。
搜索路徑:查找一組目錄
路徑搜索:查找某個(gè)文件的操作
ImportError: No module named myModule
這種錯(cuò)誤就是說:模塊不在搜索路徑里超埋,從而導(dǎo)致路徑搜索失敗佳鳖!
導(dǎo)入模塊時(shí)霍殴,不帶模塊的后綴名,比如.py
Python搜索模塊的路徑:
1)系吩、程序的主目錄
2)繁成、PTYHONPATH目錄(如果已經(jīng)進(jìn)行了設(shè)置)
3)、標(biāo)準(zhǔn)連接庫目錄(一般在/usr/local/lib/python2.X/)
4)淑玫、任何的.pth文件的內(nèi)容(如果存在的話).新功能巾腕,允許用戶把有效果的目錄添加到模塊搜索路徑中去
.pth后綴的文本文件中一行一行的地列出目錄。
這四個(gè)組建組合起來就變成了sys.path了絮蒿,
>>>import sys>>> sys.path
導(dǎo)入時(shí)尊搬,Python會(huì)自動(dòng)由左到右搜索這個(gè)列表中每個(gè)目錄。
關(guān)于 python ImportError: No module named 'xxx'的問題?
解決方法如下:
1. 使用PYTHONPATH環(huán)境變量土涝,在這個(gè)環(huán)境變量中輸入相關(guān)的路徑佛寿,不同的路徑之間用逗號(hào)
(英文的!)分開但壮,如果PYTHONPATH 變量還不存在冀泻,可以創(chuàng)建它!
這里的路徑會(huì)自動(dòng)加入到sys.path中蜡饵,永久存在于sys.path中而且可以在不同的python版本
中共享弹渔,應(yīng)該是一樣較為方便的方法。
C:\Users\Administrator\Desktop\test\module1.py:
def func1():
print("func1")
將C:\Users\Administrator\Desktop\test添加到PYTHONPATH即可直接import module1,然后
調(diào)用:module1.func1()即可溯祸。
2. 將自己做的py文件放到 site_packages 目錄下
3. 使用pth文件肢专,在 site-packages 文件中創(chuàng)建 .pth文件舞肆,將模塊的路徑寫進(jìn)去,一行一
個(gè)路徑博杖,以下是一個(gè)示例椿胯,pth文件也可以使用注釋:
# .pth file for the ?my project(這行是注釋),命名為xxx.pth文件
C:\Users\Administrator\Desktop\test
這個(gè)不失為一個(gè)好的方法剃根,但存在管理上的問題哩盲,而且不能在不同的python版本中共享。
4. 在調(diào)用文件中添加sys.path.append("模塊文件目錄")狈醉;
5. 直接把模塊文件拷貝到$python_dir/Lib目錄下种冬。
通過以上5個(gè)方法就可以直接使用import module_name了。