首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python:为模块及其导入设置__globals__

Python:为模块及其导入设置__globals__
EN

Stack Overflow用户
提问于 2013-06-20 13:55:09
回答 1查看 529关注 0票数 2

我正在用Python开发一个测试引擎,但我面临着一些与模块加载和全局函数相关的问题。

我正在创建的框架的主要思想是加载一个包含函数和注释"@thisisatest“的Python文件,以确定哪些函数是测试。我用imp.load_source加载这个文件,然后从加载的模块中产生调用函数的线程。大概是这样的:

代码语言:javascript
运行
AI代码解释
复制
module = imp.load_source("test", "testdir/test.py")
function = module.testFunction
thread = threading.Thread(target=function)
thread.start()

无论如何,我想要将这个测试连接到一个“断言函数”,执行如下操作:

代码语言:javascript
运行
AI代码解释
复制
module = imp.load_source("test", "testdir/test.py")
module.__globals__.assertAndTerminate = assertionFunction
function = module.testFunction
thread = threading.Thread(target=function)
thread.start()

这没什么。当test.py导入另一个在其中使用assertAndTerminate函数的模块时,问题就开始了。test.py加载的模块完全不知道来自test.py的__globals__,也不知道我所说的assertAndTerminate是谁(这是有道理的,因为每个模块都有自己的__globals__)。

有谁知道我可以为test.py模块和它在线程中加载的模块设置相同的assertAndTerminate函数的方法吗?我不喜欢在树中搜索导入,这是可能的吗?

有没有像Thread(target=function, global_vars=["assertAndTerminate":assertionFunction])这样的东西

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-20 14:01:52

您需要直接在模块上设置属性;这是该模块的全局名称空间:

代码语言:javascript
运行
AI代码解释
复制
module = imp.load_source("test", "testdir/test.py")
module.assertAndTerminate = assertionFunction

您必须在每个模块的基础上设置全局变量。导入时,来自一个模块的全局变量不会传播到其他模块。

您可以添加到__builtin__模块(Python3中的builtin):

代码语言:javascript
运行
AI代码解释
复制
import __builtin__

__builtin__.assertAndTerminate = assertionFunction

然后在所有模块中都可以看到这些内容:

代码语言:javascript
运行
AI代码解释
复制
>>> import __builtin__
>>> __builtin__.foobar = 'barbaz'
>>> foobar
'barbaz'

一般来说,你真的想避免这样做。找一些其他的方法来解决你的问题。导入代码,而不是依赖于设置的全局变量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17215514

复制
相关文章
【Python】模块导入 ③ ( 模块导入语法 | from 导入部分模块功能 | 为导入的模块设置别名 | import 导入模块设置别名 | from 导入模块设置别名 )
在导入模块时 , 有时不需要使用模块的完整功能 , 只需要导入指定的部分功能即可 , 这样也符合最少知识设计原则 ;
韩曙亮
2023/10/11
3550
【Python】模块导入 ③ ( 模块导入语法 | from 导入部分模块功能 | 为导入的模块设置别名 | import 导入模块设置别名 | from 导入模块设置别名 )
【Python】模块导入 ① ( Python 模块简介 | 模块概念 | 模块作用 | 模块特点 | 常见的 Python 模块 | Python 模块导入 | Python 模块导入语法 )
Python 模块 就是一个以 .py 为后缀的 Python 代码文件 , 在模块中定义有 :
韩曙亮
2023/10/11
2830
【Python】模块导入 ② ( 模块导入语法 | 导入完整模块 | import 导入完整模块 | from 导入完整模块 )
该方法用于 导入完整的模块 , 包括模块中的 函数 / 变量 / 类 / 代码块 等 ;
韩曙亮
2023/10/11
2540
【Python】模块导入 ② ( 模块导入语法 | 导入完整模块 | import 导入完整模块 | from 导入完整模块 )
python模块导入
[seemmo@RegionServer1 duwen]$ python Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
py3study
2020/01/14
1.5K0
Python 导入模块
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:Python 导入模块 更多内容请见👇 Python 入门基础专栏 Python 字符串 Python 常用字符串方法 ---- Python 导入模块 1.import 模块名 2.import 模块名 as 名称缩写 3.import 模块名.子模块名 as 名称缩写 4.from 模块名 import 函
小嗷犬
2022/11/15
1.3K0
python 模块导入问题
在python中,模块导入和编码都是比较重要的,这两种东西一定要花时间弄清楚,如果摸棱两可,每次出问题都靠猜,那是非常痛苦的。
叶子陪你玩
2022/05/22
1.7K0
python 模块导入问题
1 - 导入python 模块
1. 导入python 模块的基本方式 2. 为导入的python 模块指定别名 import math from math import cos, tan from math import * print(math.sin(1.23)) print(cos(2.34)) print(tanh(1.23)) # 指定别名 as # 一旦指定了别名,原来的名字就不能用了 import math as mt print(mt.sin(2)) from math import cos as cs print
ruochen
2021/05/22
1.3K0
1 - 导入python 模块
python模块导入细节
官方手册:https://docs.python.org/3/tutorial/modules.html
py3study
2020/01/18
1.9K0
pycharm导入自定义模块_模块导入速度python
Pycharm是很多Python开发者的首选IDE,如果能把一个工具熟练运用,往往有事半功倍的效果,各种快捷键、重构功能、调试技巧。由于Python是一门动态语言,对于自动导入包模块没有静态语言那么方便,但是我们有了Pycharm,还是可以很强大的。
全栈程序员站长
2022/09/27
1.4K0
pycharm导入自定义模块_模块导入速度python
【Python模块】- 如何导入和使用模块?模块导入方式有哪些?
首先先准备两个模块,md_01_测试模块1和 md_02_测试模块2,然后在demo文件中导入模块并使用工具。
python自学网
2022/10/05
3.3K0
【Python模块】- 如何导入和使用模块?模块导入方式有哪些?
python动态导入库模块
最近在实现一个基于深度学习的数据扩增方法,为了测试多种方法,需要一个框架型的程序动态调用model。在这种需求下,框架代码就需要动态扫描models目录下的所有模型,并动态导入。
羽翰尘
2019/11/20
2.4K0
Pycharm 导入 Python 包、模块
1.点击 File->settings 2.选择 Project Interpreter,点击右边绿色的加号添加包 3.输入你想添加的包名,点击 Install Package 4.可以在 Pycharm 保存项目的目录下查看已经安装的包,路径 D:\PycharmProjects\untitled\venv\Lib\site-packages
用户1685462
2021/07/26
2K0
Python导入模块的方法
Python导入模块的方法有两种:import module 和 from module import a,区别是前者所有导入的东西使用时需加上模块名的限定(module.a),而后者不需要。
py3study
2020/01/17
1.6K0
python 模块定义、导入、优化
2. import module_name,module2_name (导入多个模块)
py3study
2018/08/02
1.6K0
python—模块导入和类
1.查询模块:按目录依次查找需要导入的模块,模块目录一般在:/usr/lib64/python2.7
py3study
2020/01/09
1.7K0
python模块导入及导出
在Python中,模块是一种组织代码的方式,它允许你将相关的函数、类和变量封装在一个文件中,以便于代码的管理和复用。正确地导出和导入模块是编写清晰、可维护代码的重要组成部分。这篇将介绍如何正确地导出和导入Python模块,并写简单的示例来帮助理解。
不止于python
2023/09/05
1.6K0
python模块导入及导出
Python import导入模块 - reload() 导入的内容
模块被导入后,import module不能重新导入模块,重新导入需用reload
Devops海洋的渔夫
2019/06/02
3.1K0
python导入自定义模块
>>> import sys >>> print sys.path ['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-pack
py3study
2020/01/10
1.2K0
python中导入模块的妙用
导入的关键词英文是import,这里注意大小写。我们可以将import直译理解成导入。我们需要导入的是模块。所谓模块其实就是别人写好的库,说白了就是人家写好的代码供我们二次开发使用。
刘金玉编程
2019/08/20
1.3K0
python导入模块--import--2
在跟之前test_import_color_print.py同级目录下创建testimport.py文件,不然导模块会有问题
py3study
2018/08/02
6020

相似问题

导入函数中的__globals__与主模块中函数的__globals__有很大的不同。

13

Python:“导入模块”与“导入模块为”

45

无法导入Python中的模块及其函数

10

要求python导入为模块

112

Python子模块:“导入为”vs“导入”

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文