导入多个python脚本时在哪里导入软件包?

时间:2018-12-14 09:34:46

标签: python-3.x

这可能以前已经回答过,但是我找不到解决我问题的任何东西。

所以,我有2个文件。

|
|-- test.py
|-- test1.py

test1.py如下

def fnc():
    return np.ndarray([1,2,3,4])

我正在尝试从test调用test1并调用

之类的函数
from test1 import *
x = fnc()

现在我自然会得到NameError: name 'np' is not defined

我试图将test和test1中的导入都写为

import numpy as np

但是,仍然出现错误。这可能很愚蠢,但是我到底缺少什么?

感谢您的帮助。预先感谢。

2 个答案:

答案 0 :(得分:1)

每个Python模块都有其自己的命名空间,因此,如果test1.py中的某些函数依赖于numpy,则必须在test1.py中导入numpy:

# test1.py

import numpy as np

def fnc():
    return np.ndarray([1,2,3,4])

如果test.py不直接使用numpy,则无需再次导入它,即:

# test.py

# NB: do NOT use 'from xxx import *' in production code, be explicit
# about what you import

from test1 import fnc

if __name__ == "__main__":
    result = fnc()
    print(result)

现在,如果test.py 要使用numpy,它也必须导入它-正如我说的,每个模块都有其自己的命名空间:

# test.py

# NB: do NOT use 'from xxx import *' in production code, be explicit
# about what you import

import numpy as np 
from test1 import fnc


def other():
    return np.ndarray([3, 44, 5])

if __name__ == "__main__":
    result1 = fnc()
    print(result1)

    result2 = other()
    print(result2)

请注意,如果您正在python外壳中测试代码,则仅修改源代码并将其重新导入python外壳中将无法正常工作(模块仅在每个进程中加载​​一次,后续导入会从python中获取已加载的模块sys.modules缓存),因此您必须退出外壳并打开一个新外壳。

答案 1 :(得分:0)

通常,您需要在具有这些文件的目录中具有__init__.py 只需尝试在存在.py文件的目录中创建如下的 init .py文件,看看是否有帮助。

touch __init__.py