如圖,我在test_case目錄的轉(zhuǎn)智能通知存款.py里想使用/common/newConf文件,
但是導(dǎo)入common包以后,只能看到login.py文件,看不到newConf,這里是需要怎么調(diào)用呢?
導(dǎo)入系統(tǒng)
要使用模塊和庫(kù),需要先進(jìn)行導(dǎo)入。
導(dǎo)入系統(tǒng)是相當(dāng)復(fù)雜的,不過(guò)你可能已經(jīng)了解了一些基本知識(shí)。這里會(huì)介紹一些關(guān)于這一子系統(tǒng)的內(nèi)部機(jī)理。
sys模塊包含許多關(guān)于Python導(dǎo)入系統(tǒng)的信息。首先,當(dāng)前可導(dǎo)入的模塊列表都是通過(guò)sys.moudle變量才可以使用的。它是一個(gè)字典,其中鍵(key)是模塊名字,對(duì)應(yīng)的值(value)是模塊對(duì)象。
sys.modules['os']
<module 'os' from '/usr/lib/python2.7/os.pyc'>
許多模塊是內(nèi)置的,這些內(nèi)置的模塊在sys.builtin_module_names中列出。內(nèi)置模塊可以根據(jù)傳入Python構(gòu)建系統(tǒng)的編譯選項(xiàng)的不同而變化。
導(dǎo)入模塊時(shí),Python會(huì)依賴一個(gè)路徑列表。這個(gè)列表存儲(chǔ)在sys.path變量中,并且告訴Python去哪里搜索要加載的模塊。可以在代碼中修改這個(gè)列表,根據(jù)需要添加或刪除路徑,也可以通過(guò)編寫Python代碼直接修改環(huán)境變量PYTHONPATH。下面的方法幾乎是相等的1。
>>> import sys
>>> sys.path.append('/foo/bar')
$ PYTHONPATH=/foo/bar python
>>> import sys
>>> '/foo/bar' in sys.path
True
在sys.path中順序很重要,因?yàn)樾枰闅v這個(gè)列表來(lái)尋找請(qǐng)求的模塊。
也可以通過(guò)自定義的導(dǎo)入器(importer)對(duì)導(dǎo)入機(jī)制進(jìn)行擴(kuò)展。Hy2正是利用的這種技術(shù)告訴Python如何導(dǎo)入其他非標(biāo)準(zhǔn)的.py或者.pyc文件的。
顧名思義,導(dǎo)入鉤子機(jī)制是由PEP 302(http://www.python.org/dev/pep...)定義的3。它允許擴(kuò)展標(biāo)準(zhǔn)的導(dǎo)入機(jī)制,并對(duì)其進(jìn)行預(yù)處理,也可以通過(guò)追加一個(gè)工廠類到sys.path_hooks來(lái)添加自定義的模塊查找器(finder)。
模塊查找器對(duì)象必須有一個(gè)返回加載器對(duì)象的find_module(fullname, path=None)方法,這個(gè)加載器對(duì)象必須包含一個(gè)負(fù)責(zé)從源文件中加載模塊的load_module(fullname)方法。
為了進(jìn)一步說(shuō)明,下面給出了Hy利用自定義的導(dǎo)入器導(dǎo)入.hy而不是.py結(jié)尾的源文件的方法,見(jiàn)示例2.1。
示例 Hy模塊導(dǎo)入器
class MetaImporter(object):
def find_on_path(self, fullname):
fls = ["%s/__init__.hy", "%s.hy"]
dirpath = "/".join(fullname.split("."))
for pth in sys.path:
pth = os.path.abspath(pth)
for fp in fls:
composed_path = fp % ("%s/%s" % (pth, dirpath))
if os.path.exists(composed_path):
return composed_path
def find_module(self, fullname, path=None):
path = self.find_on_path(fullname)
if path:
return MetaLoader(path)
sys.meta_path.append(MetaImporter())
一旦路徑被確定是有效的且指向了一個(gè)模塊,就會(huì)返回一個(gè)MetaLoader對(duì)象。
Hy模塊加載器
class MetaLoader(object):
def __init__(self, path):
self.path = path
def is_package(self, fullname):
dirpath = "/".join(fullname.split("."))
for pth in sys.path:
pth = os.path.abspath(pth)
composed_path = "%s/%s/__init__.hy" % (pth, dirpath)
if os.path.exists(composed_path):
return True
return False
def load_module(self, fullname):
if fullname in sys.modules:
return sys.modules[fullname]
if not self.path:
return
sys.modules[fullname] = None
mod = import_file_to_module(fullname, self.path)
ispkg = self.is_package(fullname)
mod.__file__ = self.path
mod.__loader__ = self
mod.__name__ = fullname
if ispkg:
mod.__path__ = []
mod.__package__ = fullname
else:
mod.__package__ = fullname.rpartition('.')[0]
sys.modules[fullname] = mod
return mod
import_file_to_module讀取一個(gè)Hy源文件,將其編譯成Python代碼,并返回一個(gè)Python模塊對(duì)象。
uprefix模塊(https://pypi.python.org/pypi/...)是這個(gè)功能起作用的另一個(gè)好的例子。Python 3.0到3.2并沒(méi)有像Python 2中用來(lái)表示Unicode字符串的u前綴4,這個(gè)模塊通過(guò)在編譯前刪除字符串的前綴u 來(lái)確保在2.x和3.x之間的兼容性。
摘自書中,希望對(duì)你有幫助
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。