Python模块:如何防止导入新模块调用的模块

时间:2013-11-27 12:07:42

标签: python python-2.7 python-import python-module

我是Python的新用户,我正在创建一个模块来重用一些代码。 我的模块(impy.py)看起来像这样(到目前为止它有一个函数)......

import numpy as np
def read_image(fname):
    ....

并存储在以下目录中:

custom_modules/
              __init.py__
              impy.py

正如您所看到的,它使用模块numpy。问题是当我从另一个脚本导入它时,就像这样......

import custom_modules.impy as im

我键入im.我可以选择不仅调用函数read_image()而且调用模块np

我怎样才能使它只能使用我在模块中编写的函数而不是我模块调用的模块(在这种情况下为numpy)?

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

我有一个命题,可能会回答以下问题:“我不想用类/模块导入来破坏类/模块属性”。因为,Idle还建议访问类或模块中的导入模块。

这只是采用编码器通常不想访问的常规名称而IDE不建议:名称以下划线开头。这也称为“弱”内部使用»指标“,如PEP 8 / Naming styles中所述。

class C(object):
    import numpy as _np  # <-- here
    def __init__(self):
        # whatever we need
    def do(self, arg):
        # something useful

现在,在空闲状态下,自动完成只会提出do功能;未提出导入模块。

顺便说一句,您应该更改问题的标题:您不希望避免导入导入的模块(这会使它们无法使用),所以它应该是“如何防止IDE显示导入的模块导入的模块“或类似的东西。

答案 1 :(得分:0)

您可以在函数中导入numpy

def read_image(fname):
    import numpy as np
    ....

使read_image代码在本地可用,但不是全局可用。

警告但是,这可能会导致性能下降(每次运行代码时都会导入numpy,而不是在初始导入时导入一次) - 尤其是如果多次运行read_image

答案 2 :(得分:0)

如果你真的想要隐藏它,那么我建议创建一个新目录,使你的结构如下所示:

custom_modules/
    __init__.py
    impy/
        __init__.py
        impy.py

让新impy/__init__.py包含

from impy import read_image

这样,您就可以控制custom_modules.impy名称空间中的内容。