gpt4 book ai didi

python - 导入 python 类,相对于哪里?

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:24 25 4
gpt4 key购买 nike

如果我有一个小的 python 项目,拆分成一个主目录,有 2 个子目录:

src/
run.py
subdir1/
__init__.py
module1.py
subdir2/
__init__.py
module2.py

为了在 module1 中包含 module2,我必须使用完整的包含路径:from subdir1.subdir2.module2 import Class2(相对于正在运行的 python 文件),或者我可以使用 from subdir2.module2 import Class2? (相对于语句所在的文件)

src/
run.py
subdir1/
__init__.py
module1.py
subdir2/
__init__.py
module2.py

现在如何最好地将 module2 包含在 module1 中,我已经尝试相对于程序运行的位置,即 from subdir2.module2 import Class2 但这会给出错误 “No module named module2" 我忍不住想这不是最便携的做事方式,使用相对于语句所在文件的路径不是更好吗,尤其是在第一个示例中。

我假设如果我从另一个事件目录调用代码它不会搞砸,或者会吗? python 目录/run.py

谢谢!

最佳答案

导入模块有两种方式:

  1. 绝对导入
  2. 相对导入

绝对导入使 python 在 sys.path 中存储的目录中查找所需的模块模块相对于当前模块的相对导入地址。您只能在 python 包内使用相对导入。

对于第一种情况你可以使用相对导入因为subdir1是一个包

对于第二个你不能使用相对导入,因为 subdir1subdir2 不在包中。

根据 pep-8:

Absolute imports are recommended, as they are usually more readable and tend to be better behaved (or at least give better error messages) if the import system is incorrectly configured (such as when a directory inside a package ends up on sys.path):

import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example

However, explicit relative imports are an acceptable alternative to absolute imports, especially when dealing with complex package layouts where using absolute imports would be unnecessarily verbose:

from . import sibling
from .sibling import example

Standard library code should avoid complex package layouts and always use absolute imports.

Implicit relative imports should never be used and have been removed in Python 3.

关于python - 导入 python 类,相对于哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19787589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com