您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python 2.5中的相对导入

python 2.5中的相对导入

查看来自PEP 328的以下信息:@H_404_1@

相对导入使用模块的__name__属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何程序包信息(例如,将其设置为’‘),则相对导入的解析就好像该模块是顶级模块一样,无论该模块实际位于文件系统上的哪个位置。@H_404_1@

当您foo.py以脚本运行时,该模块的__name__是’‘,因此您无法进行相对导入。即使mypackage开启了,这也是正确的sys.path。基本上,您只能从模块导入相对导入。@H_404_1@

以下是解决此问题的几种选择:@H_404_1@

1)在中foo.py,检查是否__name__ == ‘‘有条件地添加mypackage到sys.path:@H_404_1@

if __name__ == '__main__':
    import os, sys
    # get an absolute path to the directory that contains mypackage
    foo_dir = os.path.dirname(os.path.join(os.getcwd(), __file__))
    sys.path.append(os.path.normpath(os.path.join(foo_dir, '..', '..')))
    from mypackage import bar
else:

2)始终bar使用导入from mypackage import bar,并foo.py以一种mypackage自动可见的方式执行:@H_404_1@

$ cd <path containing mypackage>

$ python -m mypackage.foo.foo@H_404_1@

python 2022/1/1 18:41:38 有279人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶