如何避免在现有项目布局中使用 sys.append.path?

How to avoid using sys.append.path in existing project layout?

我继承了一个布局与此类似的现有项目:

.
├── src
│   ├── __init__.py
│   └── greetings.py
├── tests
│   └── test-greetings.py

另外两个文件是:

# greetings.py

def hello():
    return 'hello'
# test-greetings.py

import pytest
import sys 

sys.path.append('../src')
from greetings import hello


def test_hello():
    assert hello() == 'hello'

这有效,即我可以从测试目录 运行 pytest test-greetings.py 但我想避免使用 sys.path.append('../src') 行。在不改变项目布局的情况下,还有另一种方法可以实现吗?

你是对的,test-greetings.py 应该假设它在可以找到 greetings 的环境中是 运行。如何实现这一点取决于安装软件包或 运行s pytest。一个简单的解决方案是

PYTHONPATH=../src pytest test-greetings.py

PYTHONPATH=src pytest test/test-greetings.py