Python import module from sibling folder
我已经经历了许多与python相关的导入问题,但我不能理解这个问题/让它工作……
我的目录结构是:
1 2 3 4 5 6 7 8 9
| Driver.py
A/
Account.py
__init__.py
B/
Test.py
__init__.py |
(=)=
驱动程序
不受欢迎的=
P.P.Py
1 2 3
| class Account:
def __init__(self):
self.money = 0 |
(=)=
Py
===========
当我试图跑步时
python Driver.py
我得到错误
Traceback (most recent call last):
from B import Test
File"B/Test.py", line 1, in from ..A import Account
ValueError: Attempted relative import beyond toplevel package
- 当询问在版本之间发生了根本性变化的特性(相对导入、Unicode和其他一些特性)时,您真的应该提到您的Python版本。有时,人们可以根据你所得到的具体错误,或者你如何编写代码来猜测,但是你不应该指望人们猜对了。
这是因为对于python来说,A和B是独立的、不相关的包。
在与Driver.py相同的目录中创建一个__init__.py,所有内容都应该按预期工作。
- 谢谢!你能解释一下init.py文件吗?我不明白网上找到的解释。我来自C++背景,所以我习惯于只给包含和这样的路径
- 这有点手摇,但基本上:把一个__init__.py文件放在一个目录中意味着"在这个目录中,所有.py文件以及包含__init__.py文件的所有子目录都是同一个包的一部分"。
- 如果他是从driver.py的进口账户来的话,他需要的就是。添加额外的init.py并使用相对导入有点笨拙,会污染顶级。
- 使用python 2.7.14这个解决方案对我不起作用。我假设解决方案是针对python 3.x的?对于那些被迫在遗留系统中工作的人,是否有python2解决方案?
- @重新签名这对python 2&python 3都有效。实际上,这个语法是为python 2.3或2.4或类似的东西创建的(我忘记了发布时间)。
- 虽然@davidwolever是100%正确的,但是首选的样式是在完成这些__init__.py技巧后使用完整的导入。例如,from .A import Account。
- 我创建了一个__init__.py,但仍然有同样的错误。我在python 3.7上。给出了什么?