除了使用import sys这样的方式加载module之外,
还可以使用:
import sys sys.path.append('f:\\python\works')
有时候一些module未必能有权限加载系统环境下。
那么就可以通过这种方式加载进去。
但是,一旦退出python虚拟机环境,就需要重新加载。
1)关于module
通常模块为一个文件,直接使用import来导入就好了。
可以作为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。
2)关于package
通常包总是一个目录,可以使用import导入包,
或者from + import来导入包中的部分模块。
包目录下为首的一个文件便是 __init__.py。
然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。
使用import spam 语句就可以将这个文件(spam)作为模块导入。
默认的检索路径为执行python的当前路径和sys.path路径
系统在导入模块时,要做以下三件事:
1. 为源代码文件中定义的对象创建一个命名空间,通过这个命名空间可以访问到模块中定义的函数及变量。
2. 在新创建的命名空间里执行源代码文件。
3. 创建一个名为源代码文件的对象,该对象引用模块的命名空间,这样就可以通过这个对象访问模块中的函数及变量,如:
import spam # 导入并运行模块 spam
print spam.a # 访问模块 spam 的属性
spam.foo()
c = spam.bar()
...
用逗号分割模块名称就可以同时导入多个模块:
import socket, os, regex模块导入时可以使用 as 关键字来改变模块的引用对象名字:
import os as system
import socket as net, thread as threads
system.chdir("..")
net.gethostname()
使用from语句可以将模块中的对象直接导入到当前的名字空间. from语句不创建一个到模块名字空间的引用对象,而是把被导入模块的一个或多个对象直接放入当前的名字空间:
from socket import gethostname
# 将gethostname放如当前名字空间
print gethostname() # 直接调用
socket.gethostname() # 引发异常NameError: socket
from语句支持逗号分割的对象,也可以使用星号(*)代表模块中除下划线开头的所有对象:
from socket import gethostname, socket
from socket import * # 载入所有对象到当前名字空间
import 语句可以在程序的任何位置使用,你可以在程序中多次导入同一个模块,但模块中的代码*仅仅*在该模块被首次导入时执行。后面的import语句只是简单的创建一个到模块名字空间的引用而已。sys.modules字典中保存着所有被导入模块的模块名到模块对象的映射。这个字典用来决定是否需要使用import语句来导入一个模块的最新拷贝.
from module import * 语句只能用于一个模块的最顶层.*特别注意*:由于存在作用域冲突,不允许在函数中使用from 语句。
每个模块都拥有 __name__ 属性,它是一个内容为模块名字的字符串。最顶层的模块名称是 __main__ .命令行或是交互模式下程序都运行在__main__ 模块内部. 利用__name__属性,我们可以让同一个程序在不同的场合(单独执行或被导入)具有不同的行为,象下面这样做:
# 检查是单独执行还是被导入
if __name__ == '__main__':
# Yes
statements
else:
# No (可能被作为模块导入)
statements
模块搜索路径
导入模块时,解释器会搜索sys.path列表,这个列表中保存着一系列目录。一个典型的sys.path 列表的值:
Linux:
['', '/usr/local/lib/python2.0',
'/usr/local/lib/python2.0/plat-sunos5',
'/usr/local/lib/python2.0/lib-tk',
'/usr/local/lib/python2.0/lib-dynload',
'/usr/local/lib/python2.0/site-packages']
Windows:
['', 'C:\\WINDOWS\\system32\\python24.zip', 'C:\\Documents and Settings\\weizhong', 'C:\\Python24\\DLLs', 'C:\\Python24\\lib', 'C:\\Python24\\lib\\plat-win', 'C:\\Python24\\lib\\lib-tk', 'C:\\Python24\\Lib\\site-packages\\pythonwin', 'C:\\Python24', 'C:\\Python24\\lib\\site-packages', 'C:\\Python24\\lib\\site-packages\\win32', 'C:\\Python24\\lib\\site-packages\\win32\\lib', 'C:\\Python24\\lib\\site-packages\\wx-2.6-msw-unicode']
空字符串 代表当前目录. 要加入新的搜索路径,只需要将这个路径加入到这个列表.
二包
多个关系密切的模块应该组织成一个包,以便于维护和使用。这项技术能有效避免名字空间冲突。创建一个名字为包名字的文件夹并在该文件夹下创建一个__init__.py 文件就定义了一个包。你可以根据需要在该文件夹下存放资源文件、已编译扩展及子包。举例来说,一个包可能有以下结构:
Graphics/
__init__.py
Primitive/
__init__.py
lines.py
fill.py
text.py
...
Graph2d/
__init__.py
plot2d.py
...
Graph3d/
__init__.py
plot3d.py
...
Formats/
__init__.py
gif.py
png.py
tiff.py
jpeg.py
import语句使用以下几种方式导入包中的模块:
* import Graphics.Primitive.fill 导入模块Graphics.Primitive.fill,只能以全名访问模块属性,例如 Graphics.Primitive.fill.floodfill(img,x,y,color).
* from Graphics.Primitive import fill 导入模块fill ,只能以 fill.属性名这种方式访问模块属性,例如 fill.floodfill(img,x,y,color).
* from Graphics.Primitive.fill import floodfill 导入模块fill ,并将函数floodfill放入当前名称空间,直接访问被导入的属性,例如 floodfill(img,x,y,color).
无论一个包的哪个部分被导入, 在文件__init__.py中的代码都会运行.这个文件的内容允许为空,不过通常情况下它用来存放包的初始化代码。导入过程遇到的所有 __init__.py文件都被运行.因此 import Graphics.Primitive.fill 语句会顺序运行 Graphics 和 Primitive 文件夹下的__init__.py文件.
下边这个语句具有歧义:
from Graphics.Primitive import *
这个语句的原意图是想将Graphics.Primitive包下的所有模块导入到当前的名称空间.然而,由于不同平台间文件名规则不同(比如大小写敏感问题), Python不能正确判定哪些模块要被导入.这个语句只会顺序运行 Graphics 和 Primitive 文件夹下的__init__.py文件. 要解决这个问题,应该在Primitive文件夹下面的__init__.py中定义一个名字all的列表,例如:
# Graphics/Primitive/__init__.py
__all__ = ["lines","text","fill",...]
这样,上边的语句就可以导入列表中所有模块.
下面这个语句只会执行Graphics目录下的__init__.py文件,而不会导入任何模块:
import Graphics
Graphics.Primitive.fill.floodfill(img,x,y,color) # 失败!
不过既然 import Graphics 语句会运行 Graphics 目录下的 __init__..py文件,我们就可以采取下面的手段来解决这个问题:
# Graphics/__init__.py
import Primitive, Graph2d, Graph3d
# Graphics/Primitive/__init__.py
import lines, fill, text, ...
这样import Graphics语句就可以导入所有的子模块(只能用全名来访问这些模块的属性).
refer to:http://blog.csdn.net/appleheshuang/article/details/7602499
相关推荐
此外,虽然递归调用没有尾部优化(在 Python 中是不可能的) ,但它们比以前的版本更有效率,Python 解释器本身的启动速度也更快, 运行时所需的核心模块的存储和加载效率也更高。 根据官方的 Python 基准测试套件,...
它使用标准的模块动态加载和访问C库。 安装 pip安装libarchive-c 兼容性 Python python-libarchive-c当前已通过python 2.7、3.4、3.5和3.6进行了测试。 如果发现与旧版本不兼容,可以向我们发送一个小补丁,但...
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用。python xxx.py和python -m xxx.py有什么区别! 自问自答: python xxx.py python -m xxx.py 这是两种加载py...
从本质上讲,这意味着您可以将Python对象转换为字节流,然后稍后在其他进程或环境中通过加载该字节流来重建它(包括对象的内部结构)(有关更多信息,请参见: -设置易受攻击的Flask应用(app.py)- $ virtualenv...
一个基于Python的Chess GUI,使用PySimpleGUI和Python-Chess模块。 用户还可以加载并使用国际象棋引擎。 该程序基于来自PySimpleGUI的的。 A.要求 Windows exe文件将在发布时提供。 同时,要使它运行,需要执行...
其次,从data模块中加载一些示例数据,并从options模块中加载一些默认选项: aapl = charts . data . aapl () msft = charts . data . msft () ohlc = charts . data . ohlc () ohlc [ 'display' ] = False series...
IDA Pro 插件添加对加载和反汇编WebAssembly模块的支持
序列化标注框架,利用pytorch实现了高效的数据加载模块
python-autoreload 一个 deamon-mod 自动重新加载器,它可以重新加载模块更改而无需手动重新启动服务。
pip模块安装 yum install python-pip # centos安装pip sudo apt-get install python-pip # ubuntu安装pip pip官方安装脚本 wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py python get-pip....
主要介绍了Python自动重新加载模块详解(autoreload module),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
要从文件加载图像,可以使用 open( )函数,在 Image 模块中: >>> from PIL import Image >>> im = Image.open("E:/photoshop/1.jpg") 加载成功后,将返回一个 Image 对象,可以通过使用示例属性查看文件内容: >>>...
使用Pygame模块开发的中国象棋,注释比较清晰,可以直接运行 包含棋盘、棋子资源的加载和绘制 使用键盘操作【上、下、左、右、回车】实现下棋操作 实现了各种棋子的棋盘走位检测和吃子、胜负判断 主代码单元为...
要在签出此 repo 后测试相对导入,您需要将目录“example1”重命名为“xxx”,在这种情况下,“import example1.example2”将从 Internet 加载文件,没有本地模块加载。 开始测试: $ python 示例.py
换句话说,通过clr.AddReference()加载的模块/程序包在自动完成引擎上不可用。 这里的解决方法很简单:使用IronPython来爬网这些库,并创建“存根”或 。 然后,CPython自动完成引擎可以使用这些“存根”。 存根...
该模块提供的基本功能经常在Zaber的许多脚本中被重新发明。 它提供了一个统一的配置界面,以允许单个YAML文件保存可在多个应用程序中使用的信息,以及用于处理日志,电子邮件和模板等基本服务的通用工具。 诸如...
这是一个引导加载程序和模块加载程序python脚本,可用于使用预引导功能来引导程序! (可能包括壳元素) 下载 转到downlad文件夹,您可以使用未编译或已编译的文件! 然后使game_boot成为运行您的游戏的程序,并运行...
不管是用import还是用from mmmm import *的方式导入模块,当程序运行之后,回头在看那个存储着mmmm.py文件的目录中,多了一个文件: $ ls mmm* mmmm.py mmmm.pyc 在这个目录下面,除了原来的那个mmmm.py之外,又多了...
多语言支持:尽管OpenCV主要使用C++编写,但它提供了丰富的API绑定,支持包括C、Python、Java、MATLAB、JavaScript等多种编程语言,方便不同领域的开发者使用。 开源与免费:OpenCV遵循BSD开源许可证发布,用户...
第三章 模块包+函数式编程 98 通用:快捷键 98 一 模块 Module 98 (一)定义: 包含一系列数据、函数、类的文件,通常以.py结尾。 99 (二)作用 99 (三)导入 99 (四) 模块变量 100 (五)加载过程 100 (六)分类 ...