1

在过去的几天里,我阅读了许多关于相对 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从它的位置移动或使用sys.path.append()

有没有人比我有更多的模块经验?谢谢!

4

3 回答 3

1

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

-m正确的答案是使用最顶层包的父文件夹中的开关运行您的脚本。所以如果这parent_folder是一个看起来像它的包并且你想运行 file_1.py 你应该

$ python -m parent_folder.subfolder1.file_1

这三个进口中的任何一个都可以工作

于 2021-05-27T15:17:10.180 回答
0

改变路径

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

所以,从这个开始:

import os, sys

path = os.path.join(os.path.dirname(__file__), os.pardir)
sys.path.append(path)
于 2021-05-27T02:37:16.063 回答
0

就我而言,我这样做了

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

然后

from parent_folder.subfolder1.file_1 import --the-function-needed--
于 2021-05-27T02:53:07.700 回答