Python 2.7 Python(2.7):如何避免导入的模块作为我的模块的一部分出现?

Python 2.7 Python(2.7):如何避免导入的模块作为我的模块的一部分出现?,python-2.7,python-import,Python 2.7,Python Import,我已经编写了两个模块m1.py和m2.py,每个模块都使用标准库中的各种模块 比如说 #m1.py import sys #. #. 及 “困扰”我的是,当我在main.py中导入两个模块m1.py和m2.py时 我可以像这样使用sys和os中定义的函数: #main.py print m1.sys.version print m2.os.listdir() 这是正常的,还是在我的代码中导入模块时需要考虑的东西? ,通常你不需要担心命名空间中什么是可访问的。任何人乱搞那些不属于模块的API文

我已经编写了两个模块m1.py和m2.py,每个模块都使用标准库中的各种模块

比如说

#m1.py
import sys
#.
#.

“困扰”我的是,当我在main.py中导入两个模块m1.py和m2.py时 我可以像这样使用sys和os中定义的函数:

#main.py
print m1.sys.version
print m2.os.listdir()

这是正常的,还是在我的代码中导入模块时需要考虑的东西?

,通常你不需要担心命名空间中什么是可访问的。任何人乱搞那些不属于模块的API文档的东西,都应该受到任何麻烦。Python假定它的程序员是负责任的成年人

例外情况是,您特别希望允许其他代码使用mymodule import*语法中不推荐的
。然后你想限制什么是公共的,这样你就不会用你自己内部的东西把你的导入器的名称空间搞得乱七八糟

以下是如何做到这一点:

  • 以下划线开头的名称(例如
    \u foo
    )被假定为私有名称,不会从mymodule import*
导入
。这不是“真正的”隐私,因为任何正常导入的人都可以通过
mymodule.\u foo
(但他们可能不应该!)访问它们

  • 如果要将要导入的模块设为专用模块,请使用
    as
    子句为它们指定一个“专用”名称,如上所述。也就是说,使用
    将操作系统导入为_os

  • 或者,您可以创建一个显式列出模块的公共名称的
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    变量,而不是乱用下划线。只有列表中的名称将使用
    from mymodule import*
    语句导入。请注意,如果您希望子模块通过mypackage import*
  • 中的
    导入,则包中需要
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这是因为Python不能相信文件系统不会弄乱包中文件名的大小写

    #main.py
    print m1.sys.version
    print m2.os.listdir()