从其他Python文件导入函数时出现'bfunc未定义'错误求助
name 'bfunc' is not defined的问题 先确认下你的代码结构和内容(方便排查问题):
my_main_file.py
from bfile import bfunc def fna(): bfunc(sth) if __name__ == "__main__": fna()
bfile.py
def bfunc(sth): # bla bla..
运行时出现错误:
name 'bfunc' is not defined
这种问题我之前也碰到过好几次,明明文件在同目录却导入失败,咱们一步步排查看看:
先核对文件名和拼写细节
确认你的文件名确实是bfile.py,没有拼写错误(比如写成bfle.py或者Bfile.py)。注意Linux/macOS系统是区分文件名大小写的,如果你的文件是Bfile.py,但代码里写from bfile import bfunc就会导入失败;Windows虽然不区分,但最好保持一致避免踩坑。检查Python运行时的工作目录
有时候你运行脚本的目录并不是文件所在的目录,导致Python找不到模块。可以在my_main_file.py开头加一段代码查看当前路径:import sys, os print("当前工作目录:", os.getcwd()) print("Python搜索路径:", sys.path)如果文件所在的目录不在
sys.path里,就手动添加进去:import sys, os # 获取当前脚本所在目录 current_dir = os.path.dirname(os.path.abspath(__file__)) if current_dir not in sys.path: sys.path.append(current_dir) from bfile import bfunc # 后续代码不变排查模块名冲突
有没有可能系统里已经存在一个叫bfile的第三方库或标准库?可以在终端运行以下命令,看看导入的bfile是不是你自己写的:python -c "import bfile; print(bfile.__file__)"如果输出的路径不是你自己的
bfile.py,说明名字冲突了,把你的文件名改成my_bfile.py,然后代码里改成from my_bfile import bfunc即可。试试添加空的
__init__.py文件
虽然Python 3.3+支持无__init__.py的命名空间包,但某些旧环境或IDE可能需要同目录下有这个文件。在两个文件的目录里创建一个空的__init__.py,再重新运行试试。清理Python缓存文件
目录里的__pycache__文件夹可能存了旧的缓存,导致导入异常。删掉这个文件夹,然后重新运行脚本。检查IDE的运行配置(如果用IDE的话)
比如PyCharm、VS Code这些工具,有时候运行配置里的“工作目录”设置错了,导致脚本运行时找不到同目录的模块。去IDE的运行配置里,把工作目录改成两个文件所在的目录,再重新运行。
内容的提问来源于stack exchange,提问作者ishandutta2007

