`
rockis
  • 浏览: 18909 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Python的import过程

阅读更多
1. import的过程
假设在/tmp/test下有个testmodule.py文件,文件内容如下:
value = 'hello world'

在控制台执行下面的命令:
[user@host]$ export PYTHONPATH=$PYTHONPATH:/tmp/test
[user@host]$ python
>>> import testmodule
>>> print testmodule.value

这时我们就会看到屏幕上会输出"Hello World"字样

这个过程中python究竟干了些什么呢?以下是我的猜测
首先查找sys.modules,判断testmodule是否已经被加载。如果已经被加载,则使用已经加载过的testmodule
如果没有加载过,则在sys.path下查找,找到后创建testmodule对象,并把创建后的testmodule保存在sys.modules变量中。

下面做两个小实验:

实验1:
>>> import sys
>>> sys.modules.has_key('testmodule')
False
>>> import testmodule
>>> sys.modules.has_key('testmodule')
True

上面的实验验证了,python会把加载过的module放在sys.modules变量中

实验2
>>> import os
>>> import testmodule
>>> testmodule.value
'hello world'
>>> os.system("echo 'value=0' > /tmp/test/testmodule.py") #将testmodule.py中的代码改为"value = 0"
>>> import sys
>>> del sys.modules['testmodule']
>>> import testmodule
>>> print testmodule.value
0

这时我们发现第二次打印的testmodule.value,值就变成了0。这个实验说明,如果在sys.modules中找不到module,则会重新加载。

实验3:
>>> import sys
>>> import types
>>> module = types.ModuleType('testmodule')
>>> sys.modules['testmodule'] = module
>>> module.value = 'hello python'
>>> import testmodule
>>> testmodule.value
'hello python'
>>>

实验3表明了,即使在PYTHONPATH下不存在的module,只要在sys.modules中能够找到,也能import。


了解了python的import的方式,我们就可以实现下面这些功能:
1.在运行期设置pythonpath
2.动态创建python代码并执行之
3.动态创建module
4.在运行期将一个module移动到另外一个包下
等等
分享到:
评论
1 楼 ph4nut 2010-01-27  
>>> import sys   
>>> import types   
>>> module = types.ModuleType('testmodule')   
>>> sys.modules['testmodule'] = module   
>>> module.value = 'hello python'  
>>> import testmodule   
>>> testmodule.value     #属性不更新
'hello python'  
>>> reload(testmodule)
>>> testmodule.value     #更新属性 
'Hello World'


从例子可以看出,import和reload的区别:
〔1〕 import一个module后,如果此module已经在sys.modules里有一个实例,那么不会更新这个实例的重名属性的值
〔2〕 在相同的情况下,reload(要先import同一个module,才能reload)则会更新重名属性的值

相关推荐

    python调试文件时发生import requests报错.doc

    python调试文件时发生import requests报错,先填写环境变量,如何一步步完成pip安装过程。

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    python学习基础之循环import及import过程

    python中的import语句是用来导入模块的,下面这篇文章主要给大家介绍了关于python学习基础之循环import及import过程的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

    【机器学习6】python实现拉格朗日乘子法

    题目如下:等式约束下的拉格朗日乘子法求解过程 2.python –拉格朗日乘子法 题目如上: from scipy.optimize import minimize import numpy as np #目标函数: def func(args): fun = lambda x: 60 - 10*x[0] - 4...

    python面试常见问题

    python面试常见问题1、“==”与is的区别2、list与tuple的区别3、python中list与dict4、局部变量和全局变量5、迭代器和生成器6、yield7、import过程8、python装饰器9、python特点(封装、继承、多态)10、垃圾回收...

    python实现WebSocket服务端过程解析

    一种类似Flask开发的WebSocket-Server服务端框架,适用python3.X 1、安装模块Pywss pip install pywss 2、搭建简易服务器 2.1 服务端代码 代码简介 route: 注册请求路径 example_1(request, data): request: ...

    python 使用 qcustomplot 首先安装qcustomplot2

    曲线能画静态图,能画动态图 曲线能实现十字光标 跟随曲线移动 显示 对应虚线的xy值 ...实现 没用选中图例 就没有十字光标 可以x轴是时间更新数据 是x轴是是时间时,能显示y值 曲线可以填充 可以突出数据点显示 ...

    Python画scratch小猫咪代码-Python画美国麻省理工学院编程猫代码-Python海龟制作gif-Python海龟截

    它有截屏功能,能在画的过程中把海龟绘图屏幕截下来,再配合gameturtle命令的makegif(制作gif的命令)。 安装方法分别是pip install sprites及pip install gameturtle 不懂请咨询李兴球,微信号scratch8. 由于要写...

    python基础,模块的定义导入,还有部分python代码,仅支持python2 展示了模块的定义实现过程

    python基础,模块的定义导入,还有部分python代码,仅支持python2 展示了模块的定义实现过程 部分代码如下 其中关键代码如下 top_run.py from tx import tx_task from rx import rx_task tx_task.tx_qpsk() rx_...

    Python中执行存储过程及获取存储过程返回值的方法

    本文实例讲述了Python中执行存储过程及获取存储过程返回值的方法。分享给大家供大家参考,具体如下: 在Pathon中如何执行存储过程呢?可以使用如下方法: 存储过程定义基本如下: ALTER procedure [dbo]. [mysp] @...

    (完整版)python教案.doc

    2、启动Python 3、Python开发环境 (二)编程初体验——我的第一个Python程序 chengxu1.py代码: import turtle #调用turtle模块 a1=turtle.Turtle() #窗口中显示一只海龟,并给他命名为"a1" 关于程序的书写: ...

    python 模块的使用 python基础训练题,模块的使用规则例程,提供python2代码例程

     Python执行import sys语句时,在sys.path变量中所列目录中寻找sys.py模块;  如果找到了这个文件,这个模块的主块中的语句将被运行;  初始化过程仅在第一次输入模块的时候进行;  sys模块中的argv变量通过...

    python-引用代码.docx

    以下是一个简单的Matplotlib示例,用于绘制一个简单的线图: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.plot(x, y) plt.show() python-引用代码全文共3页,当前为第...

    python计算器

    我用python3.5写了一个计算器,可以执行加减乘除,括号运算等,也可以分步执行显示计算过程。 主要是使用先处理括号,在计算加减乘除。

    httpimport:用于通过HTTPS加载远程内存Python软件包的模块

    httpimport让Python2 / 3包和模块可直接在Python翻译的过程存储器进口,通过远程URIs ,并且更...例子通过HTTP / S加载一个简单的包/模块>> > with httpimport . remote_repo ([ 'package1' , 'package2' , '...

    python绘制雪花飘落

    import turtle 创建画布和海龟:使用turtle模块创建一个画布,并创建一个海龟对象,用于绘制雪花和控制其运动。可以使用以下语句进行创建: python screen = turtle.Screen() snowflake = turtle.Turtle() 绘制雪花...

    python项目开发文档.docx

    在这个过程中我们需要编写一个setup.py文件用来配置打包信息,示例如下所示: from distutils.core import setup setup(name="Myblog", version="1.0", description="My Blog Distribution Utilities", author=...

    python-pandas-例子.docx

    例如,我们可以使用以下代码读取一个名为"data.csv"的文件: ```python import pandas as pd df = pd.read_csv('data.csv') ``` 2. 数据清洗 在数据分析过程中,数据清洗是非常重要的一步。Pandas提供了许多函数来...

    elgamal加密算法python代码.docx

    elgamal加密算法python代码全文共10页,... 代码实现: ```python import random def generate_key(p_bits): # 生成一个p位的大素数 p = get_large_prime(p_bits) elgamal加密算法python代码全文共10页,当前为第2页。

Global site tag (gtag.js) - Google Analytics