Python炫技操作
01?直接 import
>>> import os>>> os.getcwd()'/home/wangbm'
import ...import ... as ...from ... import ...from ... import ... as ...
02?使用 __import__
__import__(name[, globals[, locals[, fromlist[, level]]]])參數(shù)介紹:
name (required): 被加載 module 的名稱。
globals (optional): 包含全局變量的字典,該選項(xiàng)很少使用,采用默認(rèn)值 global()。
locals (optional): 包含局部變量的字典,內(nèi)部標(biāo)準(zhǔn)實(shí)現(xiàn)未用到該變量,采用默認(rèn)值 - local()。
fromlist (Optional): 被導(dǎo)入的 submodule 名稱。
level (Optional): 導(dǎo)入路徑選項(xiàng),Python 2 中默認(rèn)為 -1,表示同時(shí)支持 absolute import 和 relative import。Python 3 中默認(rèn)為 0,表示僅支持 absolute import。如果大于 0,則表示相對(duì)導(dǎo)入的父目錄的級(jí)數(shù),即 1 類似于 '.',2 類似于 '..'。
>>> os = __import__('os')>>> os.getcwd()'/home/wangbm'
>>> myos = __import__('os')>>> myos.getcwd()'/home/wangbm'
03?使用 importlib
>>> import importlib>>> myos=importlib.import_module("os")>>> myos.getcwd()'/home/wangbm'
>>> import importlib>>>>>> myos = importlib.import_module("os")>>> myos.getcwd()'/home/wangbm'
04?使用 imp
>>> import imp>>> file, pathname, desc = imp.find_module('os')>>> myos = imp.load_module('sep', file, pathname, desc)>>> myos>>> myos.getcwd()'/home/wangbm'
05?使用 execfile
execfile(filename[, globals[, locals]])
filename:文件名。
globals:變量作用域,全局命名空間,如果被提供,則必須是一個(gè)字典對(duì)象。
locals:變量作用域,局部命名空間,如果被提供,可以是任何映射對(duì)象。
>>> execfile("/usr/lib64/python2.7/os.py")>>>>>> getcwd()'/home/wangbm'
06?使用 exec
>>> with open("/usr/lib64/python2.7/os.py", "r") as f:... exec(f.read())...>>> getcwd()'/home/wangbm'
07?import_from_github_com
$ python3 -m pip install import_from_github_com
$ python3 -m pip install --upgrade pip
import_from_github_com>>> from github_com.zzzeek import sqlalchemyCollecting git+https://github.com/zzzeek/sqlalchemyCloning https://github.com/zzzeek/sqlalchemy to /tmp/pip-acfv7t06-buildInstalling collected packages: SQLAlchemyRunning setup.py install for SQLAlchemy ... doneSuccessfully installed SQLAlchemy-1.1.0b1.dev0>>> locals(){'__builtins__':, '__spec__': None, '__package__': None, '__doc__': None, '__name__': '__main__','sqlalchemy':sqlalchemy/__init__.py'>,'__loader__':} >>>
08?遠(yuǎn)程導(dǎo)入模塊
# 新建一個(gè) py 文件(my_importer.py),內(nèi)容如下import sysimport importlibimport urllib.request as urllib2class UrlMetaFinder(importlib.abc.MetaPathFinder):def __init__(self, baseurl):self._baseurl = baseurldef find_module(self, fullname, path=None):if path is None:baseurl = self._baseurlelse:# 不是原定義的url就直接返回不存在if not path.startswith(self._baseurl):return Nonebaseurl = pathtry:loader = UrlMetaLoader(baseurl)return loaderexcept Exception:return Noneclass UrlMetaLoader(importlib.abc.SourceLoader):def __init__(self, baseurl):self.baseurl = baseurldef get_code(self, fullname):f = urllib2.urlopen(self.get_filename(fullname))return f.read()def get_data(self):passdef get_filename(self, fullname):return self.baseurl + fullname + '.py'def install_meta(address):finder = UrlMetaFinder(address)sys.meta_path.append(finder)
$ mkdir httpserver && cd httpserver$ cat>my_info.pyname='wangbm'print('ok')EOF$ cat my_info.pyname='wangbm'print('ok')$$ python3 -m http.server 12800Serving HTTP on 0.0.0.0 port 12800 (http://0.0.0.0:12800/) ......一切準(zhǔn)備好,驗(yàn)證開(kāi)始。
>>> from my_importer import install_meta>>> install_meta('http://localhost:12800/') # 往 sys.meta_path 注冊(cè) finder>>> import my_info # 打印ok,說(shuō)明導(dǎo)入成功ok>>> my_info.name # 驗(yàn)證可以取得到變量'wangbm'
戀習(xí)Python 關(guān)注戀習(xí)Python,Python都好練
好文章,我在看??
