在 python3 中导入超出***包失败
Posted
技术标签:
【中文标题】在 python3 中导入超出***包失败【英文标题】:Importing beyond top-level package fails in python3 【发布时间】:2020-10-20 11:56:28 【问题描述】:我需要一些帮助。我已经坚持了一段时间。我不知道该怎么做。
我有一个目录“文件夹”,结构如下。
.
├── folder1
│ ├── folder3
│ │ ├── a.py
│ │ └── __init__.py
│ └── __init__.py
├── folder2
│ ├── b.py
│ └── __init__.py
└── __init__.py
我要做的基本上是将“folder2/b.py” python 文件中的一个函数导入“folder1/folder3/a.py”。我想从 "folder1/folder3/" 目录运行 'a.py' 文件。
让我用一个例子来说明这一点。假设我在 'b.py' 中有一个函数 '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:尝试相对导入超出***包
我用谷歌搜索了一段时间,并尝试使用这些资源(Import a module from a relative path、relative path not working even with init.py、How to fix “Attempted relative import in non-package” even with init.py)解决这个问题。
目前唯一有效的方法是在 'a.py' 中使用 "sys.append",如下所示。但是,我读到这种用法非常不专业,非常不推荐。
import sys
sys.path.append("D:/folder")
from folder2 import b
如果您之前处理过此类设置/问题,请帮助我。谢谢!
【问题讨论】:
问题是为什么你的设置看起来像这样。通常,您的项目位于根目录中,您的项目所需的任何其他包都通过 pip 安装或作为根文件夹的子级存在。因此,应该没有理由将文件夹升级。你应该把它变成一个python包。您的项目不应超出***文件夹。 哪个操作系统?至少在 Linux 中,这通常是通过将 folder2 添加到PYTHONPATH
环境变量来完成的。
@JonatanÖström 是的。但我不想使用 PYTHONPATH 方法。还有其他想法吗?
@TinNguyen 我不同意,这对我来说似乎很正常。
那么可能会看到这个问题***.com/questions/67631/…关于如何使用importlib从绝对路径导入。
【参考方案1】:
尝试将根文件夹添加到 python 路径。
【讨论】:
这就是我现在正在做的事情。但我在 *** 上的一些帖子中读到,这样做并不专业。那么还有其他想法吗? 是的,不要在代码中修改 python 路径,而是在代码之外修改环境变量:duckduckgo.com/?t=ffab&q=modify+python+path&ia=web以上是关于在 python3 中导入超出***包失败的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Swift Playground 中导入 tensorflow