You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python自定义包被计算机识别?调用包内函数提示未定义问题求助

解决Python包导入后函数未定义的问题

嘿,我来帮你搞定这个问题~你遇到的name 'average' is not defined错误,主要是因为导入方式不对,或者没有把函数暴露到包的顶层命名空间里,咱们一步步来解决:

问题根源

你定义的average函数是在mypackage/functions.py文件里的,当你只写import mypackage时,Python只会导入包本身,并不会自动把子模块里的函数加载到包的命名空间中,所以直接调用average()肯定找不到它。

解决方案

1. 直接导入子模块或函数

这是最直接的方法,不需要修改任何文件:

  • 方法一:导入整个functions模块,然后通过模块调用函数
import mypackage.functions
print(mypackage.functions.average(2,8))  # 输出5.0
  • 方法二:直接从子模块导入目标函数
from mypackage.functions import average
print(average(2,8))  # 输出5.0

2. 修改__init__.py暴露函数

如果你希望用户可以直接从mypackage导入average,可以修改mypackage/__init__.py文件,把函数导入到包的顶层:
在__init__.py中添加一行代码:

from .functions import average

之后你就可以这样使用:

import mypackage
print(mypackage.average(2,8))  # 输出5.0
# 或者更简洁的
from mypackage import average
print(average(2,8))

3. 确保Python能找到你的包

还有一个容易忽略的点:运行Python脚本时的工作目录必须是package__tutorial文件夹(也就是包含mypackage的那个父文件夹)。如果你的工作目录不在这儿,Python会找不到这个包。

如果没法切换工作目录,也可以手动把包的路径添加到Python的搜索路径中:

import sys
# 替换成你实际的package__tutorial文件夹路径
sys.path.append("/Users/xxx/Documents/package__tutorial")
import mypackage

总结

你的文件结构是没问题的,只是缺少了正确的导入步骤或者__init__.py的配置,按照上面的方法调整后,应该就能正常调用函数啦~

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:07:47