从tests子目录导入python项目模块

从tests子目录导入python项目模块,python,import,Python,Import,运行test\u ledger\u data.py时,我需要从分类账数据模块导入类。我目前在test_ledger_data.py中执行sys.path.append../in,或者我必须向所有用于测试目录的模块添加symbolik链接。两种选择似乎都不正确。如何正确地做 如果仅从项目根目录或测试目录运行该文件,则会出现错误: ├── ledger │   ├── __init__.py │   ├── ledger_data.py │   └── ledger_model.py ├── mai

运行test\u ledger\u data.py时,我需要从分类账数据模块导入类。我目前在test_ledger_data.py中执行sys.path.append../in,或者我必须向所有用于测试目录的模块添加symbolik链接。两种选择似乎都不正确。如何正确地做

如果仅从项目根目录或测试目录运行该文件,则会出现错误:

├── ledger
│   ├── __init__.py
│   ├── ledger_data.py
│   └── ledger_model.py
├── main.py
├── sscommon
│   ├── __init__.py
│   └── logging.py
└── tests
    └── test_ledger_data.py
您可以在文件夹中创建一个_init__u;.py文件,并使用以下方法导入父目录:

    from ledger.ledger_data import LedgerData
ImportError: No module named 'ledger'
这将使用os.path根据文件位置查找目录

更新:创建上面的_uinit__u; py.py并将其驻留在tests/文件夹中。
然后,在测试中,将ledge_data.py放在来自uuu init_uuuuuimport*的文件的头部;这将把init文件中的所有内容导入到模块名称空间。

在tests/文件夹中创建一个_uinit__; py.py文件,并将您的输入放在其中。请澄清您打算如何使用测试?如果我直接运行原始问题python3 test\u ledger\u data.py,则不会导入/运行您的代码。如果我从驻留在根目录中的新python文件运行,即使没有此代码,它也可以工作。它是否比sys.path.append../更好?我在这里读过,所以这不是一个好的做法。如果我最终决定从其他位置运行,那么从tests.test\u ledger\u数据导入TestLedgerData是否会产生副作用?@vladimirlen上面的代码导入父文件夹;因此,只要结构保持不变,即使你将其移动到其他位置,它也会工作。如果你觉得我的答案有用,请考虑接受和接受,谢谢。
parent_dir = os.path.abspath(os.path.join(os.path.abspath(__file__), os.pardir))
sys.append(parent_dir)