从python中删除导入的模块

2024-03-29 10:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个python文件,名为“xtraimport.py“有了这个:

import os
import sys

def its_true():
    return True

当我导入它时,它包含符号“os”和“sys”:

^{2}$

有没有办法消除名字空间的污染?我知道这些符号是在我的模块中导入的,但我不想把它们暴露给使用库的每个人。在


Tags: 文件pyimporttruereturnosdefsys
3条回答

一种控制这一点的方法是将您的模块放入一个包中。在python路径上,创建xtraimport。在这个目录中放两个文件:(1)xtraimport.py和(2)__init__.py。对于__init__.py的内容,请使用:

from xtraimport import its_true

这样,只有its_true被直接暴露:

^{pr2}$

xtraimport的全部内容仍然可供愿意采取额外步骤的专用用户使用:

In [3]: dir(xtraimport.xtraimport)
Out[3]:
['__builtins__',
 '__doc__',
 '__file__',
 '__name__',
 '__package__',
 'its_true',
 'os',
 'sys']

容易些?可能没有。但如果你喜欢的话,这里有一个解决方案。在

import xtraimport
import sys
originalDir = dir(xtraimport)
newDir      = [x for x in originalDir if x not in sys.modules]

在这里查看更多关于sys.modules:sys.modules的详细信息

设置__all__可以指定希望模块的公共接口包含哪些名称。它实际上并不阻止其他人被访问,但它会影响from foo import *,pydoc,并且可能会影响自动完成,具体取决于自动完成软件。在

例如:

__all__ = ["my_function", "MyClass"]

相关问题 更多 >