# 模块内置变量
# __package__
__package__ 是 Python 的内置变量,在一个模块中用来指示该模块所在的包的名称。该变量通常被用于帮助动态地构建导入路径,以便当一个包从一个位置移动到另一个位置时,其内部导入仍然可以正常运行。
当一个模块是直接通过 Python 解释器执行时,__package__ 的值会被设置为 None。但是,当它通过导入语句导入到其他模块时,其值将取决于导入语句和文件布局。
如果一个模块是直接从包中导入,并且它的导入语句使用了绝对导入(例如 from mypackage import mymodule), 那么 __package__ 的值将设置为 mypackage。
如果导入语句使用了相对导入(例如 from . import mymodule),那么 __package__ 的值将是包含该模块的子包(或父包)的名称。
在一个包或模块的代码中,如果需要导入一个包或模块,它们可以使用 __package__ 变量来构造正确的导入路径。
# __file__
__file__ 是 Python 的内置变量之一,用于指示当前文件的路径和文件名。如果一个文件是从脚本或解释器中直接运行的,那么 __file__ 将会是该文件的绝对路径。如果一个文件是从另一个模块导入的,则 __file__ 将会是相对路径或绝对路径的一部分。
但是一般可以根据os.path.abspath(__file__)获取文件真实绝对路径
import os
print(__file__) # 输出文件路径
print(os.path.abspath(__file__)) # 输出绝对路径
# __name__
__name__ 是 Python 的内置变量之一,用于指示当前模块的名称。如果一个文件是从脚本或解释器中直接运行的,那么 __name__ 的值将会是字符串 "__main__";如果一个文件是从另一个模块导入的,则 __name__ 将会是该模块的名称。