前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python在import时遇到的惨案

Python在import时遇到的惨案

作者头像
用户9127725
发布于 2022-08-08 00:27:35
发布于 2022-08-08 00:27:35
49700
代码可运行
举报
运行总次数:0
代码可运行

    最近使用基于python语言的django框架开发web相关的应用,但是在访问页面的时候会不定时的报错,import导入报错

 经过近1个月的观察发现有这么几个特性:不知道什么时候会触发,但是一旦触发,就一直存在这个问题只要重启web服务或者调试 问题马上就能解决。    咋一看:难道是django框架不稳定?    不要轻易怀疑框架的问题,绝大多数情况下是自己的问题。

 查看一下 __import__的描述:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
__import__(name[, globals[, locals[, fromlist[, level]]]])

Note

This is an advanced function that is not needed in everyday Python programming.

This function is invoked by the import statement. It can be replaced (by importing the __builtin__ module and assigning to__builtin__.__import__) in order to change semantics of the import statement, but nowadays it is usually simpler to use import hooks (see PEP 302). Direct use of __import__() is rare, except in cases where you want to import a module whose name is only known at runtime.

The function imports the module name, potentially using the given globals and locals to determine how to interpret the name in a package context. The fromlist gives the names of objects or submodules that should be imported from the module given by name. The standard implementation does not use its locals argument at all, and uses its globals only to determine the package context of the importstatement.

level specifies whether to use absolute or relative imports. The default is -1 which indicates both absolute and relative imports will be attempted. 0 means only perform absolute imports. Positive values for level indicate the number of parent directories to search relative to the directory of the module calling __import__().

When the name variable is of the form package.module, normally, the top-level package (the name up till the first dot) is returned, not the module named by name. However, when a non-empty fromlist argument is given, the module named by name is returned.

For example, the statement import spam results in bytecode resembling the following code:

spam = __import__('spam', globals(), locals(), [], -1)
The statement import spam.ham results in this call:

spam = __import__('spam.ham', globals(), locals(), [], -1)
Note how __import__() returns the toplevel module here because this is the object that is bound to a name by the import statement.

    从上面的doc我们可以学到:     涉及的2个最重要的点:     这有个非常关键的参数 globals 默认为 globals()内置函数返回的全局的对象。     sys.modules 保存在 global()返回的sys对象中。     对sys.modules有如下的特性:     当导入新的模块,它们加入到 sys.modules 中。这就解释了为什么第二次导入相同的模块时非常的快:Python 已经在 sys.modules 中装入和缓冲了,所以第二次导入仅仅对字典做了一个查询。 一旦给出任何以前导入过的模块名(以字符串方式),通过 sys.modules 字典,你可以得到对模块本身的一个引用。     所以,使用python动态import的时候,千万要小心不要使用相同的模块名字,最好也不要使用相同的类名。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-02-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python内置函数——__import__ 的使用方法
__import__(name[, globals[, locals[, fromlist[, level]]]])
用户7886150
2020/12/19
7340
Python相对、绝对导入浅析
这篇文章从另外一个不同的视角来分析一下Python的import机制,主要的目的是为了搞懂import中absolute、relative import遇到的几个报错。  这里不同的视角是指从Python import hooks这个方面来展开,当然本身关于Python import hooks有很多的文章,我这里不打算展开聊这个方面的内容,文章中主要会结合代码和PEP 302 – New Import Hooks这个PEP。  1. 几个跟import相关模块属性 首先我们需要了解几个跟import相关
庞小明
2018/03/09
1.2K0
__import__详解
当使用import导入Python模块的时候,默认调用的是__import__()函数。直接使用该函数的情况很少见,一般用于动态加载模块。
用户2936342
2018/08/27
6670
python import 原理剖析
当你的 python 代码需要获取外部的一些功能(一些已经造好的轮子),你就需要使用到 import 这个声明关键字。import可以协助导入其他 module 。(类似 C 预约的 include)
zero000
2021/07/14
3.1K0
python import 原理剖析
Python面试题之Python反射详解
解释Python的反射,先提一个简单的需求,现在我有一个简易的网站,由两个文件组成,一个是具体执行操作的commons.py文件,一个是入口文件index.py,现在我需要在入口文件中设置,让用户输入url,根据用户输入的url去后端执行相应的操作,内容如下:
Jetpropelledsnake21
2018/08/10
5260
python中的import,reloa
import 作用: 导入/引入一个python标准模块,其中包括.py文件、带有__init__.py文件的目录。
py3study
2020/01/08
7710
理解python的import与__import__
import 和“__import__”都是用来导入module的,但是二者还是有所不同, 可以查看帮助文档来了解其不同. 先通过 help("import") 查看其帮助,可以找到如下的说明:
qsjs
2020/06/08
1.8K0
你必须要了解了知识-python反射机制
反射机制就是在运行时,动态的确定对象的类型,并可以通过字符串调用对象属性、方法、导入模块,是一种基于字符串的事件驱动。
星星在线
2019/06/17
1.3K0
Python3.8 了解的差不多了吧,Python3.9 新特性了解一下!
原文有删改:https://docs.python.org/3.9/whatsnew/3.9.html
kbsc13
2019/10/24
1.8K0
Python 骚操作,花式导包的 8 种方法
__import__ 函数可用于导入模块,import 语句也会调用函数。其定义为:
AirPython
2020/05/26
6610
Python3.8 了解的差不多了吧,Python3.9 新特性了解一下!
原文有删改:https://docs.python.org/3.9/whatsnew/3.9.html
用户1564362
2019/10/31
1K0
Python中的循环(或循环)导入
本文翻译自:Circular (or cyclic) imports in Python
用户7886150
2020/11/30
3.8K0
Python 3.x | 史上最详解的 导入(import)「建议收藏」
1、模块、包 **模块 module:**一般情况下,是一个以.py为后缀的文件。其他可作为module的文件类型还有”.pyo”、”.pyc”、”.pyd”、”.so”、”.dll”,但Python初学者几乎用不到。 module 可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module以便让代码更好用、易懂,让coder重点放在高层逻辑上。 module能定义函数、类、变量,也能包含可执行的代码。module来源有3种: ①Python内置的模块(标准库); ②第三方模块; ③自定义模块。
全栈程序员站长
2022/09/13
11.1K0
Python 3.x | 史上最详解的 导入(import)「建议收藏」
Python内置函数详解【翻译自pyth
翻译源 来自:https://docs.python.org/3/library/functions.html 
py3study
2020/01/13
1.6K0
python中动态导入文件的方法
在实际项目中,我们可能需要在执行代码的过程中动态导入包并执行包中的相应内容,通常情况下,我们可能会将所需导入的包及对象以字符串的形式传入,例如test.test.run,下面将介绍如何动态导入。
Python学习者
2023/04/06
2.1K0
Python的import vs from ... import
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书
Tyan
2020/06/22
1.8K0
python中import原理
在 python 中引入 Module 是再常见不过了,那么当我们 import 时它做了什么事情呢?它是如何加载 Module 使用的呢?
编程黑洞
2023/03/04
5060
如何实现 Python 的惰性导入-lazy import
如果你的 Python 程序程序有大量的 import,而且启动非常慢,那么你应该尝试懒导入,本文分享一种实现惰性导入的一种方法。虽然 PEP0690[1] 已经提案让 Python 编译器(-L) 或者标准库加入这个功能,但目前的 Python 版本还未实现。
somenzz
2023/01/03
1.9K0
Python pickle 反序列化实例分析
之前 SUCTF 出了一题 pickle 反序列化的杂项题,就感觉相当有意思。后来 Balsn 一次性搞了三个,太强了,学到了很多,感谢这些师傅。下文记录了我的学习笔记以及踩过的坑,希望对大家理解 pickle 有点帮助。
wywwzjj
2023/05/09
8420
Python pickle 反序列化实例分析
从 0 到 1,如何徒手撸一个 Python 插件系统?
号主从事算法服务开发多年,临近三月的尾巴,输出一个插件化部署算法服务的解决方案。篇幅内容都经过生产实践
程序员荒生
2022/04/02
7270
从 0 到 1,如何徒手撸一个 Python 插件系统?
相关推荐
Python内置函数——__import__ 的使用方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验