Python2与Python3相对路径及绝对路径导入机制详解
本文深入解析Python2与Python3在模块导入机制上的核心差异。Python2默认采用相对路径导入,而Python3默认采用绝对路径导入。文章通过具体代码示例,展示了如何利用os.path模块处理路径,并提供了处理ImportError的异常捕获方案。同时详细说明了__init__.py文件对包定义的作用,以及使用python -m执行模块时当前目录的变化及相对导入错误的解决方法。
使用os.path.dirname()函数可以获取当前文件所在目录的父目录路径。
os.path.basename()函数用于提取路径字符串中的文件名或文件夹名部分。
Python2版本中,模块导入默认行为是相对路径;而在Python3版本中,默认行为转变为绝对路径导入。
在Python2环境中进行绝对路径导入时,需要注意具体的语法规范。
from __future__ import absolute_import
Python2在缺省情况下,解释器会依次搜索上一级目录、上上级目录等父级目录来查找模块。
针对导入路径问题,可以采取以下解决方案:
import platform
pver=platform.python_version()
pversion= int(pver.split('.')[0])
try:
if pversion==2:
print(1)
from .A import aa
else:
print(2)
from A import aa
except:
print(3)
from A import aa
采用异常处理机制来兼容不同Python版本或路径环境:
try: from .A import aa print(12) except: print(22) from A import aa
其他关键注意事项如下:
第一,判断一个目录是否构成Python包的标准,是看其中是否包含__init__.py文件。
第二,相对路径导入语法仅适用于包内部,且限制在同一个顶级包范围内进行模块引用。
第三,关于当前工作目录的概念:
执行命令play$ python main.py
此时当前目录被认定为play。
执行命令play$ python test/main.py
此时当前目录被认定为play/test。
执行命令play$ python -m test.main
此时当前目录被认定为play。
若出现SystemError: Parent module '' not loaded, cannot perform relative import错误,其中一个常见原因是在包内错误地使用了相对路径导入。尝试使用python -m命令执行模块可以解决此问题。
以上关于Python2与Python3相对路径及绝对路径导入方法的详细解析,即为本文分享的全部内容。希望这些内容能为大家提供有价值的参考,同时也欢迎大家继续支持本站获取更多技术资讯。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









