Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pytest'的路径问题;导入错误:没有名为yadayada';_Python_Unit Testing_Pytest - Fatal编程技术网

Python pytest'的路径问题;导入错误:没有名为yadayada';

Python pytest'的路径问题;导入错误:没有名为yadayada';,python,unit-testing,pytest,Python,Unit Testing,Pytest,我使用easy_install在mac上安装pytest,并开始为具有如下文件结构的项目编写测试: repo/ repo/app.py repo/settings.py repo/models.py repo/tests/ repo/tests/test_app.py 在repo目录中运行py.test,所有操作都会按照预期进行 但当我在linux或windows上尝试同样的东西时(两者都有pytest 2.2.3),每当它从我的应用程序路径第一次导入内容时,它就会发出吠声。比如说从应用程序导

我使用easy_install在mac上安装pytest,并开始为具有如下文件结构的项目编写测试:

repo/
repo/app.py
repo/settings.py
repo/models.py
repo/tests/
repo/tests/test_app.py
在repo目录中运行
py.test
,所有操作都会按照预期进行

但当我在linux或windows上尝试同样的东西时(两者都有pytest 2.2.3),每当它从我的应用程序路径第一次导入内容时,它就会发出吠声。比如说从应用程序导入一些应用程序中的定义


我是否需要编辑路径才能在这些系统上运行py.test?有人经历过吗

是,如果将
cd
转到tests目录,则源文件夹不在Python的路径中

from app import *
您有两种选择:

  • 将路径手动添加到测试文件,如下所示:

    import sys, os
    myPath = os.path.dirname(os.path.abspath(__file__))
    sys.path.insert(0, myPath + '/../')
    
  • 使用env var
    PYTHONPATH=../
    运行测试


  • 是的,如果您
    cd
    到tests目录,则源文件夹不在Python的路径中

    from app import *
    
    您有两种选择:

  • 将路径手动添加到测试文件,如下所示:

    import sys, os
    myPath = os.path.dirname(os.path.abspath(__file__))
    sys.path.insert(0, myPath + '/../')
    
  • 使用env var
    PYTHONPATH=../
    运行测试


  • 我也有同样的问题。我通过向我的
    tests
    目录中添加一个空的
    \uuu init\uuuuuuuuy.py
    文件来修复它。

    我也遇到了同样的问题。我通过向我的
    tests
    目录中添加一个空的
    \uuu init\uuuu.py
    文件来修复它。

    您可以在项目根目录中使用PYTHONPATH运行

    PYTHONPATH=. py.test
    
    或者使用pip安装作为可编辑导入

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

    您可以在项目根目录中使用PYTHONPATH运行

    PYTHONPATH=. py.test
    
    或者使用pip安装作为可编辑导入

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

    我不确定py.test为什么不在PYTHONPATH本身中添加当前目录,但这里有一个解决方法(从存储库的根目录执行):


    它之所以有效,是因为Python为您在PYTHONPATH中添加了当前目录。

    我不确定py.test为什么不在PYTHONPATH本身中添加当前目录,但这里有一个解决方法(从存储库的根目录执行):


    它之所以有效,是因为Python为您在PYTHONPATH中添加了当前目录。

    我创建这个目录是为了回答您的问题和我自己的困惑。我希望有帮助。请注意py.test命令行和tox.ini中的PYTHONPATH

    具体地说:您必须告诉py.test和tox在哪里可以找到您包含的模块

    使用py.test,您可以执行以下操作:

    PYTHONPATH=. py.test
    
    对于tox,将此添加到tox.ini中:

    [testenv]
    deps= -r{toxinidir}/requirements.txt
    commands=py.test
    setenv =
        PYTHONPATH = {toxinidir}
    

    我创造这个是为了回答你的问题和我自己的困惑。我希望有帮助。请注意py.test命令行和tox.ini中的PYTHONPATH

    具体地说:您必须告诉py.test和tox在哪里可以找到您包含的模块

    使用py.test,您可以执行以下操作:

    PYTHONPATH=. py.test
    
    对于tox,将此添加到tox.ini中:

    [testenv]
    deps= -r{toxinidir}/requirements.txt
    commands=py.test
    setenv =
        PYTHONPATH = {toxinidir}
    

    我开始感到奇怪
    ConftestImportFailure:ImportError('No module named…
    errors,当我意外地将
    \uuu init\uuuuuuuy.py
    文件添加到我的src目录(该目录不应该是Python包,只是所有源代码的容器)。

    我开始感到奇怪
    ConftestImportFailure:ImportError('No module named…
    错误,当我意外地将
    \uuuu init\uuuu.py
    文件添加到我的src目录(该目录不应该是Python包,只是所有源代码的容器)时。

    由于更简单的原因(你甚至可以说是琐碎的)我遇到了这个错误。我没有安装
    pytest
    模块。因此,一个简单的
    apt安装python-pytest
    为我修复了它


    “pytest”将作为测试依赖项列在setup.py中。请确保您也安装了测试要求。

    我之所以出现此错误,是因为更简单的原因(您甚至可以说微不足道)。我没有安装
    pytest
    模块。因此,简单的
    安装python pytest
    为我修复了此错误


    “pytest”将作为测试依赖项列在setup.py中。请确保您也安装了测试要求。

    pytest
    本身作为一个模块运行,其中包含:
    python-m pytest测试

    以模块的形式运行
    pytest
    python-m pytest测试

    conftest
    解决方案 入侵最小的解决方案是在
    repo/
    目录中添加一个名为
    conftest.py
    的空文件:

    $ touch repo/conftest.py
    
    就这样。无需编写自定义代码来破坏
    sys.path
    ,也无需记住拖动
    PYTHONPATH
    ,或将
    \uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuupy.py
    放在它不属于的目录中(不过,使用s中建议的
    python-m pytest
    是一个很好的解决方案!)

    项目目录:

    repo
    ├── conftest.py
    ├── app.py
    ├── settings.py
    ├── models.py
    └── tests
         └── test_app.py
    
    解释
    pytest
    在测试集合上查找
    conftest
    模块以收集自定义挂钩和固定装置,为了从中导入自定义对象,
    pytest
    conftest.py
    的父目录添加到
    sys.path
    (在本例中为
    repo
    目录)

    其他项目结构 如果您有其他项目结构,请将
    conftest.py
    放在包根目录中(包含包但本身不是包的目录,不包含
    \uuuuuuuuu.py
    ),例如:

    repo
    ├── conftest.py
    ├── spam
    │   ├── __init__.py
    │   ├── bacon.py
    │   └── egg.py
    ├── eggs
    │   ├── __init__.py
    │   └── sausage.py
    └── tests
         ├── test_bacon.py
         └── test_egg.py
    
    src
    布局 尽管此方法可用于
    src
    布局(将
    conftest.py
    放在
    src
    dir中):

    请注意,将
    src
    添加到
    PYTHONPATH
    会降低
    src
    布局的意义和好处!您最终将测试存储库中的代码,而不是安装的软件包。如果需要,可能根本不需要
    src
    目录

    从这里到哪里去 当然,
    conftest
    模块不仅仅是帮助源代码发现的一些文件;它是
    from setuptools import setup, find_packages
    setup(name="PACKAGENAME", packages=find_packages())
    
    pip install -e .
    
    __init__.py
    
    import os
    import sys
    sys.path.insert(0,os.path.dirname(os.path.realpath(__file__)) + "/relative/path/to/code/")
    
    package/
        package/
            __init__.py
            module.py
        tests/
            module_test.py
        setup.py
    
    import setuptools
    
    
    setuptools.setup(name='package', # Change to your package name
                     packages=setuptools.find_packages())
    
    PYTHONPATH=${PYTHONPATH}:${PWD}/src:${PWD}/test