Python炫技操作:花式导包的八种方法
时间:2025-11-04 23:34:23 出处:IT科技阅读(143)

1. 直接 import
人尽皆知的炫技方法,直接导入即可
>>> import os >>> os.getcwd() /home/wangbm与此类似的操作还有,不再细讲
import ... import ... as ... from ... import ... from ... import ... as ...一般情况下,花式使用 import 语句导入模块已经够用的导包的种。
但是炫技在一些特殊场景中,可能还需要其他的操作导入方式。
下面我会一一地给你介绍。花式
2. 使用 __import____
import__ 函数可用于导入模块,导包的种import 语句也会调用函数。炫技其定义为:
__import__(name[,操作 globals[, locals[, fromlist[, level]]]])参数介绍:
name (required): 被加载 module 的名称 globals (optional): 包含全局变量的字典,该选项很少使用,花式采用默认值 global() locals (optional): 包含局部变量的导包的种字典,内部标准实现未用到该变量,炫技采用默认值 - local() fromlist (Optional): 被导入的操作 submodule 名称 level (Optional): 导入路径选项,Python 2 中默认为 -1,花式表示同时支持 absolute import 和 relative import。Python 3 中默认为 0,表示仅支持 absolute import。如果大于 0,则表示相对导入的父目录的级数,香港云服务器即 1 类似于 .,2 类似于 ..。使用示例如下:
>>> os = __import__(os) >>> os.getcwd() /home/wangbm如果要实现 import xx as yy 的效果,只要修改左值即可
如下示例,等价于 import os as myos:
>>> myos = __import__(os) >>> myos.getcwd() /home/wangbm3. 使用 importlib
importlib是 Python 中的一个标准库,importlib 能提供的功能非常全面。
它的简单示例:
>>> import importlib >>> myos=importlib.import_module("os") >>> myos.getcwd() /home/wangbm如果要实现 import xx as yy效果,可以这样
>>> import importlib >>> >>> myos = importlib.import_module("os") >>> myos.getcwd() /home/wangbm4. 使用 imp
imp 模块提供了一些 import 语句内部实现的接口。例如模块查找(find_module)、模块加载(load_module)等等(模块的导入过程会包含模块查找、加载、缓存等步骤)。可以用该模块来简单实现内建的 __import__ 函数功能:
>>> import imp >>> file, pathname, desc = imp.find_module(os) >>> myos = imp.load_module(sep, file, pathname, desc) >>> myos <module sep from /usr/lib64/python2.7/os.pyc> >>> myos.getcwd() /home/wangbm从 python 3 开始,内建的 reload 函数被移到了 imp 模块中。而从 Python 3.4 开始,imp 模块被否决,不再建议使用,其包含的功能被移到了 importlib 模块下。即从 Python 3.4 开始,importlib 模块是之前 imp 模块和 importlib 模块的合集。
5. 使用 execfile
在 Python 2 中有一个 execfile 函数,免费信息发布网利用它可以用来执行一个文件。
语法如下:
execfile(filename[, globals[, locals]])参数有这么几个:
filename:文件名。 globals:变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。 locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。 >>> execfile("/usr/lib64/python2.7/os.py") >>> >>> getcwd() /home/wangbm6. 使用 exec
execfile 只能在 Python2 中使用,Python 3.x 里已经删除了这个函数。
但是原理值得借鉴,你可以使用 open … read 读取文件内容,然后再用 exec 去执行模块。
示例如下:
>>> with open("/usr/lib64/python2.7/os.py", "r") as f: ... exec(f.read()) ... >>> getcwd() /home/wangbm7. import_from_github_com
有一个包叫做 import_from_github_com,从名字上很容易得知,它是一个可以从 github 下载安装并导入的包。为了使用它,你需要做的就是按照如下命令使用pip 先安装它。
$ python3 -m pip install import_from_github_com这个包使用了PEP 302中新的引入钩子,允许你可以从github上引入包。这个包实际做的就是安装这个包并将它添加到本地。站群服务器你需要 Python 3.2 或者更高的版本,并且 git 和 pip 都已经安装才能使用这个包。
pip 要保证是较新版本,如果不是请执行如下命令进行升级。
$ python3 -m pip install --upgrade pip确保环境 ok 后,你就可以在 Python shell 中使用 import_from_github_com
示例如下
>>> from github_com.zzzeek import sqlalchemy Collecting git+https://github.com/zzzeek/sqlalchemy Cloning https://github.com/zzzeek/sqlalchemy to /tmp/pip-acfv7t06-build Installing collected packages: SQLAlchemy Running setup.py install for SQLAlchemy ... done Successfully installed SQLAlchemy-1.1.0b1.dev0 >>> locals() {__builtins__: <module builtins (built-in)>, __spec__: None, __package__: None, __doc__: None, __name__: __main__, sqlalchemy: <module sqlalchemy from /usr/local/lib/python3.5/site-packages/ sqlalchemy/__init__.py>, __loader__: <class _frozen_importlib.BuiltinImporter>} >>>看了 import_from_github_com的源码后,你会注意到它并没有使用importlib。实际上,它的原理就是使用 pip 来安装那些没有安装的包,然后使用Python的__import__()函数来引入新安装的模块。
8. 远程导入模块
我在这篇文章里(深入探讨 Python 的 import 机制:实现远程导入模块),深入剖析了导入模块的内部原理,并在最后手动实现了从远程服务器上读取模块内容,并在本地成功将模块导入的导入器。
具体内容非常的多,你可以点击这个链接进行深入学习。
示例代码如下:
# 新建一个 py 文件(my_importer.py),内容如下 import sys import importlib import urllib.request as urllib2 class UrlMetaFinder(importlib.abc.MetaPathFinder): def __init__(self, baseurl): self._baseurl = baseurl def find_module(self, fullname, path=None): if path is None: baseurl = self._baseurl else: # 不是原定义的url就直接返回不存在 if not path.startswith(self._baseurl): return None baseurl = path try: loader = UrlMetaLoader(baseurl) return loader except Exception: return None class UrlMetaLoader(importlib.abc.SourceLoader): def __init__(self, baseurl): self.baseurl = baseurl def get_code(self, fullname): f = urllib2.urlopen(self.get_filename(fullname)) return f.read() def get_data(self): pass def get_filename(self, fullname): return self.baseurl + fullname + .py def install_meta(address): finder = UrlMetaFinder(address) sys.meta_path.append(finder)并且在远程服务器上开启 http 服务(为了方便,我仅在本地进行演示),并且手动编辑一个名为 my_info 的 python 文件,如果后面导入成功会打印 ok。
$ mkdir httpserver && cd httpserver $ cat>my_info.py<EOF name=wangbm print(ok) EOF $ cat my_info.py name=wangbm print(ok) $ $ python3 -m http.server 12800 Serving HTTP on 0.0.0.0 port 12800 (http://0.0.0.0:12800/) ... ...一切准备好,验证开始。
>>> from my_importer import install_meta >>> install_meta(http://localhost:12800/) # 往 sys.meta_path 注册 finder >>> import my_info # 打印ok,说明导入成功 ok >>> my_info.name # 验证可以取得到变量 wangbm好了,8 种方法都给大家介绍完毕,对于普通开发者来说,其实只要掌握 import 这种方法足够了,而对于那些想要自己开发框架的人来说,深入学习 __import__ 以及 importlib 是非常有必要的。
猜你喜欢
- 探索电脑最上面一排键的错误代码(解读键盘故障,提升电脑使用体验)
 - Win平板电脑使用教程(掌握Win平板电脑操作技巧,畅享便捷移动办公)
 - Ubuntu是一个流行的Linux操作系统,基于Debian发行版和GNOME桌面环境,和其他Linux发行版相比,Ubuntu非常易用,和Windows相容性很好,非常适合Windows用户的迁移,预装了大量常用软件,中文版的功能也较全,支持拼音输入法,预装了Firefox、Open Office、多媒体播放、图像处理等大多数常用软件,一般会自动安装网卡、音效卡等设备的驱动,对于不打游戏不用网银的用户来说,基本上能用的功能都有了,在Windows操作系统下不用分区即可安装使用,就如同安装一个应用软件那么容易,整个Ubuntu操作系统在Windows下就如同一个大文件一样,很容易卸载掉。下面我就介绍一下Ubuntu操作系统安装使用的方法,供Ubuntu新手参考,希望能起到Linux扫盲的作用。 下载Ubuntu Ubuntu有三个版本,分别是桌面版(Desktop Edition),服务器版(Server Edition),上网本版(Netbook Remix),普通桌面电脑使用桌面版即可,下载地址请点这里,32位CPU请选择32bit version,上网本则可下载Netbook Remix,目前Ubuntu已经占据三分之一的上网本市场,仅次于Windows XP系统。Google的Chrome操作系统强有力的对手就是Ubuntu Netbook Remix。 目前最新的版本是9.04版,下载后的文件名是ubuntu-9.04-desktop-i386.iso,大小是698M,通过迅雷下载非常快,大约半个小时左右可以下载完毕。 安装Ubuntu 在Windows下可以不用重新分区,直接像安装一个应用程序那样安装Ubuntu,安装方法是,先使用一个虚拟光驱(例如微软的Windows虚拟光驱)装载ubuntu-9.04-desktop-i386.iso文件,然后运行根目录下的wubi.exe,运行前要将本地磁盘的名字都修改为英文名,否则会出现错误信息“UnicodeEncodeError: ascii codec cant encode characters in position 0-3: ordinal not in range(128)”而无法运行。 运行之后,会出现如下界面,选择“Install inside Windows”即可在Windows下直接安装而无需分区。 接着出现下面的安装界面,选择一个磁盘,然后将语言选择为“Chinese(Simplified)简体中文”,Installation size为Ubuntu环境的总共磁盘大小,然后是登录用户名和密码,设置好了以后就点安装继续。 后面的安装操作很简单,不需要手动干预就可以直接安装好整个操作系统,大部分的硬件驱动都可以自动安装好。提示安装完毕后,重启系统,就可以使用Ubuntu了。 自动登录Ubuntu Ubuntu默认是每次登录都是要输入用户名和密码的,这是基于安全方面的考虑,不过对于桌面版,大家都习惯自己的电脑能自动登录,类似Windows XP系统那样,通过一些设置可以实现Ubuntu自动登录。设置的方法是:点击“系统”—“系统管理”—“登录窗口” (需要输入管理员密码),然后在“安全”选项页—勾选(启用自动登录),然后在下拉列表里选择自己的用户名。之后Ubuntu就能够自动登录了。 开机自动运行程序 类似Windows的启动菜单,在Linux也可以实现开机自动运行一些命令,比较简单的方法是修改 /etc/rc.local 文件,将需要执行的命令添加进去。 桌面设置 Ubuntu的桌面,默认有两个任务栏,一个在上面,一个在下面,通常习惯Windows的用户喜欢将上面的移到下面,Ubuntu的面板无法拖动,在上面点右键后,可以让其显示在屏幕下端。 桌面背景设置和Windows很类似,在“桌面”上点右键,点更改桌面背景,就可以进行修改设置。 修改root密码 Ubuntu默认的用户并不是root,我们可以通过操作来使用root这个超级管理员帐号,以获得更大的权限。先打开终端,然后执行下面的语句 sudo passwd root 就可以修改超级管理员root的密码,之后就可以使用su命令切换到root用户来执行某些更高权限的操作。 Hosts修改 在Windows下,我们上Twitter等网站都需要修改hosts文件,在Linux下也有hosts文件,文件位于/etc/hosts,使用root用户可以编辑修改这个文件,主机名和IP的格式与Windows的完全相同,例如: 127.0.0.1 localhost 在Ubuntu下安装软件 Ubuntu下的软件安装有几种方式,常用的是deb包的安装方式,deb是debian系列的Linux包管理方式,ubuntu属于debian的派生,也默认支持这种软件安装方式,当下载到一个deb格式的软件后,直接在界面上就可以安装。 另一种常见的安装方式是源代码编译安装,很多软件会提供了源代码给最终用户,用户需要自行编译安装,先使用tar将源代码解压缩到一个目录下,然后进入这个目录,执行以下三条命令: ./configure make sudo make install 执行完成后,即可完成软件的编译和安装。 还有一种方式是apt-get的安装方法,APT是Debian及其衍生发行版的软件包管理器,APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。常用的安装命令是: sudo apt-get install 软件名 sudo apt-get remove 软件名 Firefox浏览器的更新 Ubuntu安装完成后会自动安装一个Firefox浏览器,遗憾的是这个Firefox版本通常较低,例如Ubuntu 9.04会安装Firefox 3.0,不过我们可以想办法下载最新的Firefox覆盖掉老版本Firefox,具体方法是,先上Firefox官方网站下载最新的Linux版本Firefox,然后将其解压缩到某一个目录下,例如firefox目录,进入终端,到这个目录的父目录,执行下面的语句: sudo cp -r firefox /usr/lib/firefox-3.5.2 sudo mv /usr/bin/firefox /usr/bin/firefox.old sudo ln -s /usr/lib/firefox-3.5.2/firefox /usr/bin/firefox-3.5.2 sudo ln -s /usr/bin/firefox-3.5.2 /usr/bin/firefox 之后就可以将Firefox成功替换为最新的Firefox 3.52版本,未来的Firefox更新也可以使用这种方法。 Firefox的Flash问题 经过我的实际测试,Ubuntu自动安装的Flash插件swfdec存在很多问题,在Firefox中,很多网页的Flash无法显示,包括Google音乐和开心网等,因此建议使用下面两条语句将其卸载。 sudo apt-get remove swfdec-mozilla sudo apt-get remove swfdec-gnome 之后可安装官方的Adobe Flash Player的Linux版,下载地址是: http://get.adobe.com/flashplayer/ 安装完成后,还要解决中文乱码问题,解决方法是执行下面语句: sudo cp /etc/fonts/conf.d/49-sansserif.conf /etc/fonts/conf.d/49-sansserif.conf.bak sudo rm /etc/fonts/conf.d/49-sansserif.conf 之后,Firefox的Flash就完全正常了,在Firefox中访问开心网等Flash网站,显示都正常。 安装常用软件 介绍完了安装的方法和Firefox,下面就可以去各个网站下载一些常用的Linux软件来安装了,下面是我整理的一些常用的Linux软件列表: Linux QQ:访问这个地址,下载deb文件安装,可以在Linux下玩腾讯QQ。 防火墙 firestarter: 使用 sudo apt-get install firestarter 安装。 杀毒软件 AntiVir: 虽然Linux下的病毒很少,但对于新手还是有必要安装一个杀毒软件,访问这个地址可以下载免费版的AntiVir杀毒软件,这个软件我曾经在《五个最佳的防病毒软件》中介绍过。 rpm 转 deb 工具: 使用 sudo apt-get install alien 安装 JAVA环境安装: JRE的安装 sudo apt-get install sun-java6-jre ,JDK的安装 sudo apt-get install sun-java6-jdk eclipse安装: 先到这个地址下载最新的eclipse,然后使用tar xvfz eclipse-php-galileo-linux-gtk.tar.gz -C /opt 解压缩后就可以使用。 Picasa 3 for Linux安装: 访问这个地址,下载后直接安装。 Google Earth安装: 在这里下载最新版本的Google Earth,下载下来是个BIN文件,在图形界面上右击 GoogleEarthLinux.bin,在“权限”选项卡中勾选“允许以程序执行文件”,如下图。 之后在终端上执行 ./GoogleEarthLinux.bin 即可安装。 安装LAMP环境 Ubuntu的桌面版也可以安装LAMP(Linux + Apache + MySQL + PHP)环境,这里我介绍一个最简单的方法,就是使用XAMPP,这个项目我曾经在《常见的WAMP集成环境》中介绍过,XAMPP不但支持Windows,还支持Linux,在其网站下载之后,运行下面两条命令: tar xvfz xampp-linux-1.7.2.tar.gz -C /opt /opt/lampp/lampp start 就可以启动LAMP环境,XAMPP是功能全面的集成环境,软件包中包含Apache、MySQL、SQLite、PHP、Perl、FileZilla FTP Server、Tomcat等等,很适合开发环境使用。 安装程序添加程序菜单和桌面 有些程序是直接解压缩安装的,因此不会添加“应用程序”的菜单项,我们可以手动将其添加菜单项,具体方法是,打开“系统”—“首选项”—“主菜单”,新增即可。 添加桌面快捷方式是,在桌面上点右键,创建启动器。这个“启动器”就是Windows里面的“快捷方式”。 将“应用程序”的菜单项创建到桌面快捷方式的方法是,在“应用程序”的菜单项上单击鼠标右键,选择“将此启动器添加到桌面”或“将此启动器添加到面板”,就可以了。
 - 解读求精电脑平车错误代码及排除故障方法(深入分析求精电脑平车错误代码,解决常见故障问题)
 - 电脑屏幕手动维修教程(简单易行的DIY维修,让你的电脑屏幕焕然一新)
 - 打造纯净电脑系统的完全指南(一步步教你如何自己制作纯净高效的电脑系统)
 - 按照《Ubuntu 9.04的3D桌面特效安装图解》该文的方法成功地开启3D桌面效果。也先来看看效果图。图1:Ubuntu 9.10的3D球体特效安装命令见图2。图2见图3打开进行相关设置。图3下面一起来欣赏下Ubuntu 9.10下3D桌面特效。图4:Ubuntu 9.10的3D圆柱特效(图片大,打开稍慢,请耐心等待,点击上图查看大图)图5:还是Ubuntu 9.10的3D圆柱特效(图片大,打开稍慢,请耐心等待,点击上图查看大图)
 - Nexus 是Maven仓库管理器,我们可以在本地架设一个Maven私有仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。1、本经验是基于:系统环境:ubuntu12.04nexus版本:nexus-2.10.0-02maven版本:apache-maven-3.2.1jdk版本:jdk1.7.0_402、把下载下来的压缩包解压到一个文件夹中3、解压缩后 进入 nexus-2.10.0-02-bundle/nexus-2.10.0-02/bin/jsw/conf4、修改wrapper.conf文件 修改 wrapper.java.command=jdk所在目录/bin/java (一定要带java,网上很多教程都没带java)5、然后进入 cd nexus-2.10.0-02-bundle/nexus-2.10.0-02/bin 目录 执行 ./nuxus start 就可以启动nuxus啦nexus的操作:nexus { console | start | stop | restart | status | dump }6、在地址栏里面输入:http://localhost:8081/nexus注意:步骤4很重要,假如显示没有权限,请添加权限!请配置好环境变量,jdk,maven都需要配置好!谢谢阅读,希望能帮到大家,请继续关注脚本之家,我们会努力分享更多优秀的文章。
 - 电脑蓝屏错误码051解析(揭秘电脑蓝屏错误码051的原因和解决方法)