我是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)?
非常感谢你的帮助。
答案 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
名称空间中的内容。