[英]Importing beyond top-level package fails in python3
我需要一些帮助。 我已经坚持了一段时间。 我不知道该怎么做。
我有一个具有以下结构的目录“文件夹” 。
.
├── folder1
│ ├── folder3
│ │ ├── a.py
│ │ └── __init__.py
│ └── __init__.py
├── folder2
│ ├── b.py
│ └── __init__.py
└── __init__.py
我想要做的基本上是将"folder2/b.py" python 文件中的 function 导入"folder1/folder3/a.py" 。 我想从“folder1/folder3/”目录运行“a.py”文件。
让我用一个例子来说明这一点。 假设我在 'b.py' 中有一个 function 'hello'。
def hello():
print("Hello world!")
我有另一个像这样的文件'a.py'。
from b import hello
def hello1():
print("Hello World!!")
我想导航到“folder3”目录。
cd 文件夹 1/文件夹 3
并运行 python 文件“a.py”,如下所示。
python a.py
这样做会给我以下错误。
ValueError:尝试相对导入超出顶级 package
我用谷歌搜索了一段时间并尝试使用这些资源解决这个问题( 从相对路径导入模块, 即使使用 init .py 相对路径也不起作用,即使使用init .py , 如何修复“尝试在非包中进行相对导入” )。
到目前为止唯一有效的方法是在“a.py”中使用“sys.append” ,如下所示。 但是,我读到这种用法非常不专业且非常不推荐。
import sys
sys.path.append("D:/folder")
from folder2 import b
如果您以前处理过此类设置/问题,请帮助我。 谢谢!
尝试将根文件夹添加到 python 路径。
按照ValueError 中的教程进行操作:尝试在顶级 package 之外进行相对导入,该教程解释了 python 如何解析相对导入。
folder0
├── __init__.py
├── folder1
| ├── __init__.py
│ ├── folder3
│ │ ├── a.py
│ │ └── __init__.py
│ └── __init__.py
├── folder2
│ ├── b.py
│ └── __init__.py
└── __init__.py
文件夹0/文件夹1/文件夹3/a.py
from ...folder2 import b
b.hello()
现在您可以从 folder0 的父目录调用
$ python -m folder0.folder1.folder3.a
Hello world!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.