【发布时间】:2023-04-08 08:10:01
【问题描述】:
我正在通过一些基本的 Python 导入将我的头撞到墙上。我已经尽可能地简化了这个问题,希望如果我了解它是如何工作的,我能够将它扩展到更大的范围
这是两难境地 -run.py 子模块内部的 p1 有效,但在顶层时无效。为什么?
(版本 Python 3.6.3)
结构:
/sandbox
__init__.py
/p1
__init__.py
file1.py
run.py
run.py
/sandbox/p1/__init__.py
__all__ = ["file1", "file2"]
/sandbox/p1/file1.py
from file2 import B
class A(object):
pass
/sandbox/p1/file2.py
class B(object):
pass
/sandbox/p1/run.py
from file1 import A
a = A()
/sandbox/run.py
from p1 import file1
a = file1.A()
在做:
python p1/run.py(工作正常)python run.py
Traceback(最近一次调用最后一次): 文件“run.py”,第 2 行,在 从 p1 导入文件 1 文件“.../sandbox/p1/file1.py”,第 1 行,在 从文件 2 导入 B ModuleNotFoundError: 没有名为“file2”的模块
【问题讨论】:
-
这个模块是否在你的 python(环境?)路径中的某个地方?如果不是,您需要进行相对导入
from .p1 import file1。如果是,可以使用from sandbox.p1 import file1导入 -
from p1 import file1 -> 这一行找到 file1 并尝试导入它。但是 file1 无法导入 file2 虽然它在同一路径中
-
file1应该有from .file2 import B出于同样的原因 -
谢谢。刚试过这个,有趣的事情发生了。顶部模块中的 run.py 有效,但 p1/run.py 无效。回溯(最后一次调用):文件“p1/run.py”,第 1 行,在
from file1 import A File “/Users/bogdan.culda/Desktop/workspace/sandbox/p1/file1.py”,第 1 行,在 from .file2 import B ImportError: 尝试相对导入,没有已知的父包
标签: python import git-submodules