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

时间:2017-10-02 11:55:49

标签: python import

├── ledger
│   ├── __init__.py
│   ├── ledger_data.py
│   └── ledger_model.py
├── main.py
├── sscommon
│   ├── __init__.py
│   └── logging.py
└── tests
    └── test_ledger_data.py

运行ledger_data时,我需要从test_ledger_data.py模块导入类。我目前在sys.path.append("../")中执行test_ledger_data.py,或者我必须为用于tests目录的所有模块添加符号链接。这两个选项似乎都不对如何正确地做到这一点?

如果我只是从项目根目录或tests目录运行该文件,我会收到错误:

    from ledger.ledger_data import LedgerData
ImportError: No module named 'ledger'

1 个答案:

答案 0 :(得分:1)

您可以在文件夹中创建__init__.py文件,并使用以下内容导入父目录:

parent_dir = os.path.abspath(os.path.join(os.path.abspath(__file__), os.pardir))
sys.append(parent_dir)

这使用os.path根据您的文件位置查找目录。

更新:创建上述__init__.py并将其保留在tests/文件夹中。 然后,在test_ledge_data.py放在文件头from __init__ import *;这会将init文件中的所有内容导入模块命名空间。