这可能以前已经回答过,但是我找不到解决我问题的任何东西。
所以,我有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
但是,仍然出现错误。这可能很愚蠢,但是我到底缺少什么?
感谢您的帮助。预先感谢。
答案 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