如何在Python中正确使用相对导入来执行模块

问题描述 投票:0回答:1

我有以下文件结构:

.
├── main.py
└── modules
    ├── __init__.py
    ├── package1
    │   ├── __init__.py
    │   ├── module1.py
    │   ├── module2.py
    │   └── __pycache__
    │       ├── __init__.cpython-310.pyc
    │       └── module1.cpython-310.pyc
    ├── package2
    │   ├── __init__.py
    │   ├── module_r.py
    │   └── __pycache__
    │       ├── __init__.cpython-310.pyc
    │       └── module_r.cpython-310.pyc
    └── __pycache__
        └── __init__.cpython-310.pyc

这是modules/package1/module1.py中的代码:

def func():
    print("the function was called")

这是modules/package2/module_r.py中的代码:

from ..package1.module1 import func

func()

另外,这是 main.py 中的代码:

from modules.package2 import module_r 

当我使用以下命令执行主文件时:

python3 main.py
我将预期结果打印到终端(“该函数被调用”)但是,当我尝试运行
python3 modules/package2/module_r.py
时,我收到此错误:

Traceback (most recent call last):
  File "/home/santiago/Documents/test-python-packages/modules/package2/module_r.py", line 1, in <module>
    from ..package1.module1 import func
ImportError: attempted relative import with no known parent package

我也尝试过绝对导入和这段代码:

import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from modules.package1.module1 import func

但我得到了相同的结果。如何正确导入我的包,以便我可以从主文件导入它们并将它们作为脚本执行?

python python-3.x visual-studio-code import terminal
1个回答
0
投票

我找到了一种运行代码的方法。 这是我找到解决方案的原始网站

在“.”中,执行

cd ..

然后做

python3 -m try.modules.package2.module_r

错误的原因是你只是运行一个Python文件,而不是一个Python项目。所以文件之间没有关系。

如果对你有帮助,请点赞并标记为答案。

结果

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.