测试时,'python setup.py test' 是唯一可以在 Python 包中测试的方法吗?

When testing, 'python setup.py test' is the only way to test in Python Package?

我的 Python 包结构有问题。

这是我在 Mac OSX 和 Python 3.4 中所做的:

1. mkdir MyProject
2. cd MyProject
3. virtualenv --python=python3.4 venv
4. . venv/bin/activate
5. pip install pytest pyscaffold
6. putup MyProject

然后,目录结构将如下所示:

MyProject/
   MyProject/
      docs/
      myproject/
      tests/
      requirements.txt
      setup.py
      .
      .
   venv/

我在myproject中添加了apple.py,在tests中添加了test_apple.py

那么,结构就是这样的:

MyProject/
   MyProject/
      docs/
      myproject/
         apple.py
      tests/
         test_apple.py
      requirements.txt
      setup.py
      .
      .
   venv/

apple.py

import sys
for path in sys.path:
    print(path)

print("start apple")

def get_apple():
    print("apple!!")
    return 5

当我 运行 apple.py 通过在 myproject 目录中键入 python apple.py 时,它会打印:

/Users/Chois/Desktop/MyProject/MyProject/myproject
/Users/Chois/Desktop/MyProject/venv/lib/python34.zip
/Users/Chois/Desktop/MyProject/venv/lib/python3.4
/Users/Chois/Desktop/MyProject/venv/lib/python3.4/plat-darwin
/Users/Chois/Desktop/MyProject/venv/lib/python3.4/lib-dynload
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin
/Users/Chois/Desktop/MyProject/venv/lib/python3.4/site-packages
start apple

如上所示,sys.path 包括 /Users/Chois/Desktop/MyProject/MyProject/myproject

所以,我做了一个 test_apple.py 这样的:

test_apple.py

import sys
for path in sys.path:
    print(path)

from myproject.apple import get_apple

def test_apple():
    assert 5 == get_apple()

当我通过键入 py.test -s test_apple.py
运行 此代码时 (-s 选项用于在代码中显示 print 语句的结果)

/Users/Chois/Desktop/MyProject/MyProject/tests
/Users/Chois/Desktop/MyProject/venv/lib/python34.zip
/Users/Chois/Desktop/MyProject/venv/lib/python3.4
/Users/Chois/Desktop/MyProject/venv/lib/python3.4/plat-darwin
/Users/Chois/Desktop/MyProject/venv/lib/python3.4/lib-dynload
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin
/Users/Chois/Desktop/MyProject/venv/lib/python3.4/site-packages
Traceback (most recent call last):
  File "test_apple.py", line 5, in <module>
    from myproject.apple import get_apple
ImportError: No module named 'myproject'

但是,当我 运行 通过键入 python setup.py test 进行测试时,它 运行 没有错误! !!

我想知道的是我如何 运行 使用 py.test -s test_xxxx.py 而不是 ALL 测试模块 python setup.py test 的特定测试模块].

需要你的帮助,谢谢。

请阅读Good Integration Practices

make sure that “mypkg” is importable, for example by typing once:

pip install -e . # install package using setup.py in editable mode