如何在python模块中本地导入包

时间:2015-12-24 00:32:38

标签: python module

我将numpy用于存储在我模块中的自定义函数。包numpy是否会自动导入到我调用模块的文件中?我可以将包numpy仅用于我的模块中定义的函数,而不是调用我的模块的文件吗?

1 个答案:

答案 0 :(得分:0)

当您在模块中调用import numpy时,是的,它仅在您的模块中可用,而不是从您导入的任何模块中获取。但是,没有什么能阻止外部模块导入numpy本身,因为它必须安装在系统上才能自行导入。

<强> ETA:

演示:

inner.py

import numpy as np
print ("Inner: ", np.__version__)

outer.py

import inner
print ("Outer: ", np.__version__)

输出:

$ python outer.py
('Inner: ', '1.9.2')
Traceback (most recent call last):
  File "outer.py", line 3, in <module>
    print ("Outer: ", np.__version__)
NameError: name 'np' is not defined

<强> ETA:

如果您使用通配符(from inner import *)导入模块,则可能会发生这种情况。 PEP8 discourages this

  

应避免使用通配符导入(from <module> import *),因为它们不清楚命名空间中存在哪些名称,这会使读者和许多自动化工具混淆。通配符导入有一个可防御的用例,即将内部接口重新发布为公共API的一部分(例如,使用可选加速器模块中的定义覆盖接口的纯Python实现,以及确切的定义将是被覆盖的事先不知道。