当前位置: 代码迷 >> python >> 使用一个主脚本跨多个目录调用 python 模块
  详细解决方案

使用一个主脚本跨多个目录调用 python 模块

热度:43   发布时间:2023-07-16 10:49:22.0

我在跨不同目录访问 python 模块时遇到了一些问题..

我当前的目录看起来像这样:

__main__.py
__test__.py
tests
    some_tests.py
    _init__.py
modules
    main_modules.py
    __init__.py       

在 some_tests.py 中,我将从 /modules 调用一些方法,而test .py 在 /tests 中执行我的测试模块

我在 some_tests.py 中使用以下内容来引用 /modules 中的模块

sys.path.append(r'../modules/')  
from main_modules import  xfunc, yfunc

如果我只是单独运行 some_tests.py,这很好用。 但是,一旦我使用test .py 调用 some_tests.py,我就会返回一个 ImportError,其中当此脚本调用 some_tests.py 时无法找到 /modules 中的模块

我曾尝试将模块直接导入测试.py 中,但这也不起作用。 我在这里做错了什么?

编辑

在 some_tests.py 我做类似的事情

sys.path.append(r'../modules/')  
from main_modules import modulea, moduleb

def func():
    x = modulea.xfunc()
return x

但这是我在运行时得到的..

File "__test__.py", line 14, in <module>
  from tests import some_test.py
File "C:\...\__init__.py", line 2, in <module>
  from .some_test.py import (func,
File "C:\...\some_test.py", line 7, in <module>
  from modules import modulea, moduleb
ModuleNotFoundError: No module named modulea

从我在运行时可以收集到的信息来看,当我运行test .py 并严格导入该函数时,无法导入该函数,因为它不再在 sys.path.append 上运行,因此不知道在哪里查看。 即使我将模块显式导入test .py 也是如此

您不需要执行 sys.path.append 而是您可以通过以下方式直接导入:

如果要导入“main_modules.py”的方法或类

from modules.main_modules import xyz,abc(whatever method or classes)

同样跟随其他也