Python从父目录的相对导入
在过去的几天里,我阅读了许多关于相对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
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