Python 模块未出现在 sys.modules 中

Posted

技术标签:

【中文标题】Python 模块未出现在 sys.modules 中【英文标题】:Python module not showing up in sys.modules 【发布时间】:2018-01-24 20:15:43 【问题描述】:

我已经通过解压 tar.gz 并运行 setup.py 安装了一些包。

我正在检查

>>> import sys
>>> '[packagename]' in sys.modules

但它一直说False,对他们所有人来说。我错过了什么?

【问题讨论】:

【参考方案1】:

sys.modules 仅显示已加载到您的环境中的模块。

sys.modules

这是一个将模块名称映射到模块的字典 已经加载的。这可以被操纵以强制 重新加载模块和其他技巧。然而,更换 字典不一定会按预期工作并删除 字典中的基本项目可能会导致 Python 失败。

要获得你想要的行为,你需要先导入模块:

import sys
import packagename
'packagename' in sys.modules #True

控制台

如果您在控制台中,并且想检查您是否有可用的模块,只需尝试导入它。如果不存在,会报错:

>>> import packagename
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'packagename'

代码

如果您正在编写代码并希望在使用模块之前以一种简洁的方式检查模块是否存在,那就是easier to ask for forgiveness than permission。

try:
    import packagename
except ImportError:
    #handle the error

【讨论】:

【参考方案2】:

我在我的虚拟环境中执行了conda update --all,之后又在“基础”环境中执行了,错误消失了。更新我的虚拟环境后,错误仍然存​​在。这就是为什么我认为它是由虚拟环境和“基本”环境中的两个不同版本(在我的情况下为 numpy:ImportError: parent 'numpy' not in sys.modules)引起的。

【讨论】:

以上是关于Python 模块未出现在 sys.modules 中的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Python 3 的 'sys.modules' 中没有导入的模块?

python 的sys.modules的用法

python 模块知识

python sys.modules来获得当前加载的模块,使用进口可以添加要加载的模块。可以用名字来过滤模块成员。名称仅仅是名字不带命名空间

常用的模块 一 --sys --os ---haslib摘要算法

os和sys模块