微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从父目录导入 Python 相对

如何解决从父目录导入 Python 相对

过去几天我阅读了许多关于 Python 相关导入的文档,但遇到了以下文件夹结构的问题:

parent_folder
       ├── subfolder1
       │        └── __init__.py
       │        └── file_1.py
       ├── subfolder2
       │        └── __init__.py
       │        └── file_2.py
       │
       └ __init__.py (parent folder has an init in it)

file_2.py 中,我想访问 file_1.py 中的函数。我尝试将以下内容添加file_2.py,但似乎都不起作用:

1. from ..subfolder1 import file_1    #ImportError: attempted relative import with no kNown parent package

2. import parent_folder.subfolder1.file_1    #ModuleNotFoundError: No module named 'parent_folder'

3. from parent_folder.subfolder1 import file_1    #ModuleNotFoundError: No module named 'parent_folder'

我现在真的很迷茫,似乎无法理解为什么会发生这种情况。我现在可能已经阅读了 10 篇关于相对导入的不同指南,但仍然不明白为什么。

注意,如果我把 file_2.py 放在 parent_folder 里面,然后添加 import subfolder1.file1 它可以很好地导入,但是我不能从它的位置移动 file_2.py 或使用 {{ 1}}

有比我更了解模块经验的人吗?谢谢!

解决方法

建议弄乱 sys 路径的答案是错误的 - 不幸的是,这个建议在网络上漂浮,导致无限的挫败感和崩溃(好)到细微的错误(坏)。

正确的答案是使用最顶层包的父文件夹中的 -m 开关运行您的脚本。因此,如果此 parent_folder 是一个包,并且您想运行 file_1.py,您应该

$ python -m parent_folder.subfolder1.file_1

三个导入中的任何一个都可以工作

,

更改路径

确保在开始导入任何内容之前更改 sys.path以免在导入时出错

所以,从这个开始:

import os,sys

path = os.path.join(os.path.dirname(__file__),os.pardir)
sys.path.append(path)
,

就我而言,我是这样做的

import sys
sys.path.insert(0,'..')

然后

from parent_folder.subfolder1.file_1 import --the-function-needed--

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。