如何正确构建Python包,实现导入后无需模块名调用函数?
问题原因与解决方案
为什么会报错?
当你执行from package_name import my_module时,仅将my_module这个模块对象导入到当前代码的命名空间中。my_function是my_module内部的函数,属于模块的属性,并未直接进入当前命名空间,因此直接调用my_function()时Python找不到该名称,抛出NameError。
解决方法(按需选择)
方法1:直接导入目标函数
如果你只需要使用my_function,可以跳过模块直接导入函数:
from package_name.my_module import my_function print(my_function())
利用你已在__init__.py中将my_function导入包命名空间的设置,也可以直接从包导入:
from package_name import my_function print(my_function())
方法2:从已导入的模块中提取函数
如果已经导入了my_module,可以额外把函数拉到当前命名空间:
from package_name import my_module from my_module import my_function print(my_function())
或者一步完成导入:
from package_name.my_module import my_module, my_function
方法3:通配符导入(不推荐)
用*导入模块内所有名称,虽能直接调用函数,但易引发命名冲突,仅适合小型测试场景:
from package_name.my_module import * print(my_function())
内容的提问来源于stack exchange,提问作者iurysp
相关产品推荐
相关产品推荐

