Bas*_*sti 31 python path pytest
这应该是地球上最简单的问题,但即使经过大量的搜索和修补,我仍然在寻找一种"正确"的方式来构建目录结构并设法正确运行pytest等方面遇到了麻烦.
假设我有一个名为apple的程序.
|- README.md
|- apple
| |-- __init__.py
| |-- apple.py
| - tests
| |-- test_everything.py
Run Code Online (Sandbox Code Playgroud)
apple.py包含一些函数,例如,让我们调用一个函数eat().该test_everything.py文件包含一些测试assert eat()=="foobar".好那么容易,但随后开始有趣:
__init__.py那苹果目录怎么样......对吗?空或应该在里面?py.test从根目录调用是最佳做法吗?还是py.test tests?__init__.py在他们的测试目录中,但是在py.test文档中明确说明这是错误的.那么为什么上帝呢test_everything.py文件顶部的内容是:a import apple还是from apple import *?或完全不同的东西eat()或调用函数apple.eat()吗?os.path.dirname在python中进行操作这应该很容易,但我已经看到了上述的所有组合,甚至没有谈到tox和无数其他工具.然而,有一点点错误,你会被抛出一些ImportError: No module named 'apple'或其他一些时髦的错误.
什么是"正确"的方式?github等上的建议和现有代码遵循极为不同的约定.对于经验丰富的中档编码器,这应该更容易.
the*_*orn 17
__init__.py那苹果目录怎么样......对吗?空或应该在里面?是,对的.最常见的是空洞.如果你放入foo = 42它,你可以稍后做from apple import foo,from apple.apple import foo如果你把它放进去你需要做的apple.py.虽然看起来很方便,但你应该谨慎使用它.
py.test应该能够找到你的测试,但见下文..
__init__.py在他们的测试目录中,但是在py.test文档中明确说明这是错误的.那么为什么上帝呢因此,您可以在提供常用测试功能的测试中导入文件.在py.test中,可以通过在名为的文件中创建fixture来更好地实现tests/conftest.py.
from apple import apple
apple.eat()
这看起来非常脆弱.我也建议
(a)将环境变量PYTHONPATH设置为指向README.md或更好的文件夹
(b)创建一个setup.py文件(与文件处于同一级别README.md),这是一个最小的文件:
from setuptools import setup
setup(name='apple', packages=['apple'])
Run Code Online (Sandbox Code Playgroud)
像这样运行文件:
python setup.py develop
Run Code Online (Sandbox Code Playgroud)
现在apple全局可用,你永远不会再看到no module named apple问题,即你可以从根文件夹或tests文件夹运行py.test.
您可以setup.py在Python包装用户指南中阅读更多信息,网址为https://python-packaging-user-guide.readthedocs.org/en/latest/index.html