gpt4 book ai didi

Python项目目录结构/pytest麻烦

转载 作者:IT老高 更新时间:2023-10-28 22:15:56 24 4
gpt4 key购买 nike

这应该是地球上最简单的问题,但即使经过大量搜索和修补,我仍然很难找到一种“正确”的方式来放置目录结构并设法正确运行 pytest 等。

假设我有一个名为 apple 的程序。

|- README.md
|- apple
| |-- __init__.py
| |-- apple.py
| - tests
| |-- test_everything.py

apple.py 包含一些函数,例如,让我们调用一个 eat()test_everything.py 文件包含一些测试,例如 assert eat()=="foobar"。太好了,太容易了,但有趣的事情就开始了:

  • 苹果目录中的 __init__.py 怎么样...对吗?是空的还是里面应该有什么?
  • 从根目录调用 py.test 是不是最佳实践?还是 py.test 测试
  • 许多项目的测试目录中有一个 __init__.py,但在 py.test 文档中明确指出这是错误的。那为什么上帝为什么
  • test_everything.py 文件的顶部是什么:import applefrom apple import *?或完全不同的东西
  • 你是通过 eat() 还是 apple.eat() 调用这些函数?
  • 有些人甚至建议在 python 中操作 os.path.dirname

这应该很容易,但我已经看到了上述所有组合,甚至没有谈到 tox 和无数其他工具。然而,只要有最轻微的错误,就会抛出一些 ImportError: No module named 'apple' 或其他一些时髦的错误。

什么是“正确”的方式? github 等上的建议和现有代码遵循截然不同的约定。对于中等经验的编码人员来说,这应该容易得多。

最佳答案

  1. 苹果目录中的 __init__.py 怎么样...对吗?是空的还是里面应该有什么?

是的,正确。最经常是空的。如果您将 foo = 42 放入其中,您可以稍后执行 from apple import foo 而您需要执行 from apple.apple import foo如果你把它放在 apple.py 中。虽然它看起来很方便,但您应该谨慎使用它。

  1. 从根目录调用 py.test 是最佳做法吗?还是 py.test 测试?

无论如何,py.test 应该能够找到您的测试,但请参见下文..

  1. 许多项目的测试目录中有一个 __init__.py,但在 py.test 文档中明确指出这是错误的。那为什么上帝为什么

因此,您可以在提供通用测试功能的测试中导入文件。在 py.test 中,通过在名为 tests/conftest.py.

的文件中创建 fixture 可能会更好地实现
  1. test_everything.py 文件的顶部是什么:一个 import apple 或 from apple import *?或完全不同的东西

从苹果进口苹果

  1. 您是通过eat() 还是apple.eat() 调用这些函数?

apple.eat()

  1. 有些人甚至建议在 python 中操作 os.path.dirname

这似乎很脆弱。我建议要么

(a) 设置环境变量 PYTHONPATH 指向 README.md 所在的文件夹,或者更好

(b) 创建一个 setup.py 文件(与您的 README.md 文件处于同一级别),这是一个最小的:

from setuptools import setup
setup(name='apple', packages=['apple'])

像这样运行文件:

python setup.py develop

现在 apple 是全局可用的,您应该永远不会再看到 no module named apple 问题,即您可以从根文件夹或测试文件夹运行 py.test .

您可以在 https://packaging.python.org/ 上的 Python 打包用户指南中阅读有关 setup.py 的更多信息

关于Python项目目录结构/pytest麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26804421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com