Python项目目录结构/pytest故障
这应该是地球上最简单的问题,但即使经过广泛的搜索和修补,我仍然很难找到一种“正确”的方法来放置目录结构和正确运行pytest等 假设我有一个叫做苹果的程序Python项目目录结构/pytest故障,python,path,pytest,Python,Path,Pytest,这应该是地球上最简单的问题,但即使经过广泛的搜索和修补,我仍然很难找到一种“正确”的方法来放置目录结构和正确运行pytest等 假设我有一个叫做苹果的程序 |- README.md |- apple | |-- __init__.py | |-- apple.py | - tests | |-- test_everything.py py包含一些函数,例如,让我们调用一个eat()。而test\u everything.py文件包含一些测试,如assert eat()=“fooba
|- README.md
|- apple
| |-- __init__.py
| |-- apple.py
| - tests
| |-- test_everything.py
py包含一些函数,例如,让我们调用一个eat()
。而test\u everything.py
文件包含一些测试,如assert eat()=“foobar”
。很好,很容易,但乐趣开始了:
- 苹果目录中的
怎么样。。。对的里面应该是空的还是什么\uuuu init\uuuu.py
- 从根目录调用
是最佳做法吗?或py.test
py.test测试
- 很多项目的测试目录中都有一个
,但是py.test文档中明确指出这是错误的。那么为什么是上帝呢\uuuuu init\uuuuuu.py
- 在
文件的顶部是什么:导入apple还是从apple导入*?或者完全是别的什么test_everything.py
- 然后您是通过
还是eat()
调用函数apple.eat()
- 有些人甚至建议在python中操作
os.path.dirname
“正确”的方法是什么?github等上的建议和现有代码遵循截然不同的约定。对于一个中等经验的程序员来说,这应该容易得多。我已经安排了一个有效的示例 我认为给软件包和模块
apple
命名都很混乱,也许这是造成混乱的原因之一。唯一不明显的一点是,如果没有使用正确的setup.py
distutils软件包来安装apple
软件包,则必须将PYTHONPATH
设置到当前目录
\uuuu init\uuuu.py
怎么样。。。对的里面应该是空的还是什么foo=42
放入其中,您可以稍后从apple import foo执行,而如果您将其放入apple.py
中,则需要从apple.apple import foo执行。虽然看起来很方便,但你应该少用
从根目录调用py.test是最佳做法吗?还是py.test测试
不管怎样,py.test都应该能够找到您的测试,但请参见下文
很多项目的测试目录中都有一个\uuuuu init\uuuuuu.py
,但是py.test文档中明确指出这是错误的。那么为什么是上帝呢
因此,您可以在提供公共测试功能的测试中导入文件。在py.test中,通过在名为tests/conftest.py
的文件中创建装置,可以更好地实现这一点
test_everythings.py文件顶部是什么:导入apple还是从apple导入*?或者完全是别的什么
从苹果进口苹果
那么您是通过eat()还是apple.eat()调用这些函数呢
apple.eat()
有些人甚至建议在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
在全球范围内可用,您将永远不会再看到名为apple
的无模块问题,即您可以从根文件夹或tests文件夹运行py.test
你可以在Python打包用户指南中阅读更多关于setup.py
的信息,网址是我已经展示了如何使用setup.py
方法完成任务。来自apple import的apple
在内部不起作用测试一切.py
:ModuleNotFoundError:没有名为“apple”的模块
@endolith它起作用,虽然如果cwd=apple或您没有运行setup.py develope等,则可能不会。这是2014年的公认答案,分数为7,如果你不能让它发挥作用,那么很有可能这是你这边的一个问题——你更可能通过提出一个新问题而不是留下一条缺乏上下文/细节的评论来获得帮助……这确实令人困惑。我的假设是,apple import apple的中的第一个“apple”指的是文件夹名。因此,包的名称。第二个“苹果”是指文件名。那么,模块的名称。现在,要真正设置项目,必须正确配置并执行一个必需的setup.py文件。我想,很多信息必须事先知道?我需要多少个包,它们将如何命名。或者是否有使用setup.py的通用工作流?比如偶尔点击python setup.py
将项目引入新文件?如果创建单独的测试,至少将您的apple alias源代码放入src
目录中