Package Pathing Errors in Python
所以我正在为我的Python实现一个文件结构,并且在执行导入时出错。文件结构如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
这是
1 2 3 4 5 6 | 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() |
号
每个
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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") |
这是我执行
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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' |
。
因此,根据我的理解,
简短回答:使用
1 | from . import secondary |
较长版本:当这是具有绝对导入语义的python 3时,看起来您假定python 2是相对导入语义。请看一下,例如,这里有更详细的解释。
如果你愿意的话
1 | import secondary |
号
这是一种绝对进口,因此相对于当前软件包,这不是解决问题的方法,而是从
当您以python脚本(而不是使用
在导入之后,您的代码将在
变化
1 | import secondary |
号
在
到
1 | import Vers.1_1.secondary |
。
并且
1 | import Vers.1_2.secondary |
在另一个