正确导入包的方式和位置

时间:2018-03-29 19:15:06

标签: python

我有一个utils.py文件,我在其中存储了我在主代码中使用的大部分功能。为了安全起见,我在主代码和utils.py中导入了许多常用库,如numpy,pandas等。

然而,在今天清理我的代码时,我想知道这是否是导入库的最佳方式。我意识到Python不会重新加载已经加载的模块(除非明确询问reload numpy as np)。但是如果import numpy as np中的utils.py,我是否需要在主代码文件中再次导入这些库?我认为如果我在主代码中导入库,那么它们的命名空间应该是全局可用的,因此我不必再在utils.py中导入它们。这是对的吗?

1 个答案:

答案 0 :(得分:0)

这不正确。

导入的模块将看不到导入器的命名空间。 它的全局namspace将是它自己文件的全局变量。

虽然导入程序可以通过限定来查看导入的命名空间 使用模块名称,反过来将不起作用。

假设您有module1.pyutils.py

module1.py:
import sys
import utils

utils.print_args()

utils.py:
# import sys

def print_args():
    print(sys.argv)

运行module1.py而不取消注释import sys中的utils.py将会提供

NameError: name 'sys' is not defined

取消注释后,你得到

['module1.py']