繁体   English   中英

在 python3 中导入超出顶级 package 失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM