【问题标题】:Calling python modules across multiple directories with one main script使用一个主脚本跨多个目录调用 python 模块
【发布时间】:2020-07-02 14:45:14
【问题描述】:

我在跨不同目录访问 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 中的模块

我尝试将模块直接导入到 test.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

,情况仍然如此

【问题讨论】:

标签: python python-3.x directory subdirectory


【解决方案1】:

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

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

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

同样关注其他也

【讨论】:

  • 但是测试模块和主模块在目录结构的同一级别,所以我需要返回一个级别以便在测试模块中调用这些模块,否则我仍然得到一个导入错误..
  • 如果我从命令行执行 some_tests.py 也不会出现异常,它来自当我从 test.py 调用 some_tests.py 时,它位于较高的位置水平。
猜你喜欢
  • 2019-05-25
  • 2012-06-20
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多