【问题标题】:ERROR collecting setup.py while trying to run py.test?尝试运行 py.test 时收集 setup.py 时出错?
【发布时间】:2012-06-03 23:29:35
【问题描述】:

我试图在我的包上运行py.test,但它试图从项目根目录中解析setup.py,即使我试图排除它。

我需要从 *.py 文件中收集测试,因为测试类包含在模块中。

# setup.cfg
[pytest]
norecursedirs = .svn _build tmp* lib/third lib *.egg bin distutils setup.py
python_files = *.py

当我运行 py.test 时,它仍然会给出我已经排除的 ERROR collecting setup.py

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/core.py:140: in setup
>           raise SystemExit, gen_usage(dist.script_name) + "\nerror: %s" % msg
E           SystemExit: usage: py.test [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
E              or: py.test --help [cmd1 cmd2 ...]
E              or: py.test --help-commands
E              or: py.test cmd --help
E           
E           error: no commands supplied

【问题讨论】:

    标签: python setuptools pytest tox


    【解决方案1】:

    pytest 文档将答案隐藏在here. 中,在项目的根目录中放置一个conftest.py 文件,其中列出了您希望pytest 忽略的文件:

    但是,许多项目会有一个他们不想导入的 setup.py。此外,可能存在只能由特定 python 版本导入的文件。对于这种情况,您可以通过在 conftest.py 文件中列出文件来动态定义要忽略的文件:


     # content of conftest.py
     import sys
    
     collect_ignore = ["setup.py"]
    

    【讨论】:

      【解决方案2】:

      Jedi 中,我们通过添加内容为collect_ignore = ["setup.py"]conftest.py 文件解决了这个问题。这使它“神奇地”工作。

      恕我直言,py.test 应该更容易忽略 setup.py,因为这是一个非常典型的用例。

      【讨论】:

        【解决方案3】:

        您可以像这样为您的 pytest.ini 配置配置 --ignore 选项:

        addopts = --ignore=setup.py
        

        如果您位于根目录并希望 py.test 忽略 setup.py 文件,这应该会有所帮助。

        【讨论】:

        • 该死,这意味着如果我有另一个setup.py,它也会被包括在内。还有,tox 无法在父目录中查找 tox.ini ?!
        • 为了避免包含其他 setup.py 文件,我认为 pytest.ini 需要一种方法来允许指定确切的位置,例如 --ignore={inidir}/setup.py 左右。
        【解决方案4】:

        从文档(和变量的名称)来看,norecursedirs 似乎只跳过目录,所以由于setup.py 是一个文件,所以将它放在norecursedirs 中没有任何效果。

        http://pytest.org/latest/customize.html?highlight=norecursedirs#confval-norecursedirs

        【讨论】:

        • 感谢您的评论。这仍然不能解决我的问题。从这些我认为如果你想寻找*.py,不可能阻止py.test加载setup.py。仍然出现错误,因为py.test 正在尝试执行setup.py。也许我可以用 setup.py 做一些事情来使它 py.test 友好。
        猜你喜欢
        • 2017-10-19
        • 2017-05-06
        • 2015-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 2022-01-09
        • 2018-12-08
        相关资源
        最近更新 更多