Python从父目录的相对导入

Python从父目录的相对导入,python,python-3.x,import,relative-import,Python,Python 3.x,Import,Relative Import,在过去的几天里,我阅读了许多关于相对Python导入的文档,但遇到以下文件夹结构的问题: parent_folder ├── subfolder1 │ └── __init__.py │ └── file_1.py ├── subfolder2 │ └── __init__.py │ └── file_2.py │ └ __ini

在过去的几天里,我阅读了许多关于相对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
中的函数。我已尝试将以下内容添加到
文件_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_文件夹中
,然后添加
import子文件夹1.file1
,它可以很好地导入,但我无法将
file_2.py
从其位置移动或使用
sys.path.append()

有没有人有比我更丰富的模块经验?谢谢大家!

改道 在开始导入任何内容之前,请确保更改系统路径,这样导入时不会出现错误

所以,从这个开始:

import os, sys

path = os.path.join(os.path.dirname(__file__), os.pardir)
sys.path.append(path)
就我而言,我是这样做的

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


建议弄乱系统路径的答案是错误的——不幸的是,这个建议漂浮在网络上,导致无限的沮丧和崩溃(好)到微妙的错误(坏)

正确答案是使用最顶层包的父文件夹中的
-m
开关运行脚本。因此,如果这个
parent\u文件夹
是一个看起来像它的包,并且您希望运行file\u 1.py,那么您应该

$ python -m parent_folder.subfolder1.file_1

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

这是否回答了您的问题?这是完美的,正是我想要的!感谢您理解
sys.append
问题。我曾多次被告知不要在prod envs中使用它,甚至在我的问题中提到我宁愿不使用它,但当我发布任何关于Python包的内容时,这似乎总是每个人的答案(欢迎:)
$ python -m parent_folder.subfolder1.file_1