Python中被其他脚本调用的脚本如何正确导入库?
解决Python模块中
np未定义的NameError问题 我来帮你排查这个问题——看起来你遇到的NameError大概率是模块命名冲突导致的,而非导入方式的问题。咱们一步步拆解:
问题根源分析
你写的load.py模块和Python标准库(或已安装的第三方库)里的某个同名模块撞名了!当你在main.py里写import load时,Python加载的不是你自己写的load.py,而是系统路径里的那个同名模块,而那个模块里的compute()函数自然没有np的定义,所以才会报错。
你可以在main.py里加一行代码验证这个猜测:
import load print(load.__file__) # 打印加载的load模块的实际路径
如果输出的路径不是你自己的load.py所在目录,那就实锤了命名冲突。
解决方案
1. 重命名你的模块(最推荐)
把你的load.py改成一个不会和系统/第三方库撞名的名字,比如my_data_loader.py,然后修改main.py里的导入逻辑:
#!/usr/bin/python import numpy as np import my_data_loader # 改为新的模块名 a = my_data_loader.compute() print(a)
2. 强制Python优先加载你的模块
如果不想改名,你可以把当前脚本所在目录加到Python搜索路径的最前面,让Python优先加载你的模块。修改main.py:
#!/usr/bin/python import sys sys.path.insert(0, '.') # 把当前目录放到搜索路径最顶端 import numpy as np import load a = load.compute() print(a)
关于导入方式的小提示
其实你尝试的两种导入写法都是有效的,只要加载的是你自己的load.py:
- 模块顶部导入(更规范,推荐用于模块内多个函数需要用到的库):
# load.py import numpy as np def compute(): a = np.array([2,3,1,0]) return a
- 函数内部导入(适合仅该函数需要用到的库,能减少模块初始化的开销):
# load.py def compute(): import numpy as np a = np.array([2,3,1,0]) return a
内容的提问来源于stack exchange,提问作者Asmita Poddar
相关产品推荐
相关产品推荐

