如何让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
相关产品推荐
相关产品推荐

