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移动到另外一个包下
等等
分享到:
相关推荐
在Python编程中,保持...总的来说,`isort`是Python开发中的一个强大工具,它能够帮助开发者遵守编程规范,提高代码质量,并简化代码审查的过程。通过学习和应用`isort`,我们可以更好地管理和维护我们的Python项目。
`mypy-boto3-importexport`库则为这一过程提供了Python化的接口。 使用`mypy-boto3-importexport`,开发者可以轻松创建和管理导入作业,监控作业状态,以及处理导出作业。这个库的API设计遵循Python的惯用法,使得...
Python 调试文件时发生 Import Requests 报错解决方法 在 Python 调试文件时,如果碰到 Import Requests 报错,可能是因为 Python 环境中没有安装 Requests 库所致。解决这个问题需要完成 pip 安装过程,下面是详细...
<module 'module_name' from 'E:\\PythonImport\\module_name.py'> ``` 可以看到,`module_name`被成功导入,并且打印出了模块的类型和路径。 #### 七、总结 通过本文的介绍,我们可以看到Python中的`import`机制...
在Python编程环境中,有时我们可能会遇到“cannot import name '_AES'”这样的错误,尤其是在尝试导入`Crypto.Cipher.AES`模块时。这个问题通常出现在使用了`pycryptodome`库或者`pycrypto`库尝试进行AES加密解密...
在Python开发过程中,经常会遇到导入模块时出现“找不到对应模块”的错误。这种情况通常是因为Python解释器无法在系统路径中找到指定模块的位置。本文将详细介绍可能导致此问题的原因及相应的解决策略。 #### 一、...
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
python中的import语句是用来导入模块的,下面这篇文章主要给大家介绍了关于python学习基础之循环import及import过程的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
`import_resolve-0.1.2.tar.gz` 是一个Python库的压缩包,其版本为0.1.2。这个库可能包含了用于解决模块导入问题的特定功能,特别是在处理复杂的依赖关系或者优化代码导入流程时可能会用到。 Python的`import`机制...
在Python编程环境中,有时我们可能会遇到“cannot import name '_AES'”这样的错误,尤其是在尝试使用像`Crypto.Cipher.AES`这样的加密库时。这个错误通常意味着Python无法找到 `_AES` 这个内部模块或者动态链接库...
在Python编程过程中,故障诊断是不可或缺的一个环节,它关乎到代码的健壮性和问题的快速定位。本资源集合提供了一些基于Python的故障诊断程序,旨在帮助故障诊断学者深入理解和实践这一领域。以下将详细探讨Python...
1. `setup.py`: 这是一个Python脚本,用于定义库的元数据(如名称、版本、作者等)以及安装配置,通常使用setuptools或distutils库来执行安装过程。 2. `README`: 通常提供库的基本介绍、使用方法和安装指南。 3. `...
本话题将详细介绍如何利用Python将Excel文件转换为带制表符的TXT文本,并在PowerBuilder中调用这个过程。 首先,我们需要了解如何使用Python读取和处理Excel文件。Python的`pandas`库提供了便捷的方式来处理Excel...
这个过程会将所需的动态链接库(DLLs)和相关文件安装到Python的site-packages目录下,以便Python能够找到并加载Boost扩展。 使用Boost Python时,首先需要在Python代码中导入`boost.python` 模块。例如: ```...
import multiresolutionimageinterface ``` 如果没有报错,则表示模块加载成功。 #### 三、常见问题及解决方案 ##### 3.1 版本不匹配 - **问题描述**:如果ASAP版本与Python版本不匹配,可能会导致加载失败。 -...
在Python编程过程中,经常需要从其他模块导入功能或类,这通常通过`import`语句实现。当涉及到不同目录层级下的模块时,使用相对路径进行导入变得尤为重要。本文将详细介绍如何在Python中从相对路径下进行模块导入,...
在实际操作过程中,用户可以通过编写Python脚本来自动化SPSS的分析任务。例如,可以使用Python来读取数据集,创建新的输出文档,运行语法,保存服务器配置,以及进行其它的各种操作。而通过ScriptParameter方法,...
### Python中import导入不同目录的模块方法详解 在Python编程中,经常需要使用`import`语句来导入其他模块或包。本文将详细介绍如何在不同的目录层级之间进行模块的导入,包括同级目录、子目录、父目录以及兄弟目录...
在这个过程中,需要注意反爬策略,如设置User-Agent,延时请求等,以避免被网站封禁。同时,爬虫项目应遵循网站的robots.txt规则,尊重网站的版权和用户隐私。 总结来说,这个Python豆瓣电影爬虫项目涵盖了网络爬虫...