gpt4 book ai didi

python - Python 中的包路径错误

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

所以我正在努力为我的 Python 实现一个文件结构,但在导入时遇到错误。文件结构如下所示:

Dirs(Folder)
╘ run.py
Vers(Folder)
╘ __init__.py
1_1(Folder)
╘ Main.py
secondary.py
__init__.py
1_2(Folder)
╘ Main.py
secondary.py
__init__.py

这是run.py的内容

import importlib
print("This is the main module")
A = importlib.import_module(str("Vers.1_1.Main"))
A.start()
B = importlib.import_module(str("Vers.1_2.Main"))
B.start()

每个Main.pysecondary.py都包含相同的代码,除了打印语句中的版本号,该版本号根据版本号而变化它们所在的文件夹。

Main.py

import secondary
class start():
def __init__(self):
print("This is version 1.2 main")
secondary.start()

secondary.py

class start():
def __init__(self):
print("This is version 1.1 secondary")

这是我执行run.py时得到的输出

This is the main module
Traceback (most recent call last):
File "Python\Python36-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "Dirs\Vers\1_1\Main.py", line 1, in <module>
import secondary
ModuleNotFoundError: No module named 'secondary'

因此,根据我的理解,run.py 能够成功找到并尝试从 1_1 文件夹导入 Main.py。但是,在执行Main.py文件时,无法看到secondary.py在同一目录中来导入它。我尝试寻找如何解决这个问题,但我真的不知道我的问题是什么。我尝试设置包的方式是否错误?如果是这样,我需要更改什么才能使其正常工作?

最佳答案

简短回答:使用

from . import secondary

更长的版本:看起来您假设 Python 2 相对导入语义,而这是具有绝对导入语义的 Python 3。看看例如here以获得更详细的解释。

如果你这样做

import secondary

这是绝对导入,因此相对于当前包解析,而是从sys.path解析。

当您将 run.py 作为 Python 脚本(而不是作为带有 -m 的模块)执行时,脚本所在的目录将添加到 sys .path 自动,这就是为什么导入 Vers.1_1.Main 有效,但 import secondary 无效的原因。

关于python - Python 中的包路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47820757/

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