sys.path 包括 py.test rootdir 以使测试相对于项目根目录导入

2024-03-05

我在 pytest 中遇到问题,未将我的项目 rootdir 包含在 sys.path 列表中。相反,它包含默认情况下测试所在的目录。

这是我的项目结构。

proj/
  setup.py
  mypackage/
    __init__.py
    a.py
    tests/
      test_a.py

运行 pytest 时

py.test proj/mypackage/tests

它插入项目/mypackage/测试进入 sys.path ,这不好,因为现在我无法导入 a 因为它与测试目录无关。

我注意到 py.test 检测到 rootdir,它被识别为我的项目的根目录,即 proj 目录。这就是我在测试期间在 sys.path 中想要的内容,因此我的所有代码都相对于该目录。如何确保 py.test 包含(...)/项目/在 sys.path 中,这样我就可以import mypackage.a在 test_a.py 中。


我使用 conftest.py 将包路径(相对于 conftest.py 文件)附加到 sys.path,以便可以导入包。像这样的事情:

# contents of conftest.py
import sys
from os.path import abspath, dirname
package_path = abspath(dirname(dirname(__file__)))
sys.path.insert(0, package_path)

然后,您可以将此文件放入测试目录中。默认情况下,conftest.py 文件将在其他任何事情之前运行,因此其他测试将能够导入 mypackage。

另一种可能更好的方法是添加 setup.py 并遵循给出的建议here https://stackoverflow.com/questions/26804421/python-project-directory-structure-pytest-trouble.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sys.path 包括 py.test rootdir 以使测试相对于项目根目录导入 的相关文章

随机推荐

  • 如何在 Unix 中批量执行 svn mv

    我想将大量文件从一个目录批量移动到svn中的另一个目录 不幸的是 svn 只支持一次移动一个文件 基本上我想移动某种类型的文件 xml 到一个完全不同的目录 例如mv foo 酒吧 xml forbar xml 我尝试使用 find 并使用
  • 如何将 PIL 添加到 Eclipse 中的 PyDev,以便我可以导入它并在我的项目中使用它?

    我正在尝试在我的项目中使用 PIL 但 pydev 似乎无法在我的项目中找到它 首先 当我进入 python shell 时我可以看到它 我可以导入它并在 python sys path 中看到它 其次 我将其添加到 eclipse 中的
  • 带有可选小时数的 TimeSpan FormatString

    我有一个时间跨度 ts 主要有分钟和秒 但有时也有几个小时 我想要ts返回一个格式化的字符串 该字符串将给出以下结果 3 30 hours not displayed showing only full minutes 13 30 1 13
  • 取消从应用程序调用 Web 服务

    我有一个 winform 应用程序 有两个按钮 GetData 和 Close 在 GetData 上 我从 Web 服务检索一些数据 而 Close 只是关闭对话框 我在一个单独的线程上调用网络服务 该线程是类实例变量 如果从 Web 服
  • 使用正则表达式进行 C Sharp 文件夹搜索

    从顶级目录获取与特定正则表达式匹配的文件夹列表的最有效方法是什么 我目前只是递归地迭代子文件夹以查看它们是否与正则表达式匹配 如果匹配 我将使用目录路径获取文件名 目前 由于此目录中的文件夹数量较多 使用当前方法进行此搜索大约需要 50 分
  • 如何在反应路由中设置延迟功能?

    如何在 React js 上设置延迟函数 有没有什么方法可以在反应路由中添加或删除类 以便页面可以转换 添加 删除或切换类每次都应该有效 是否可以使用延迟功能添加 删除或切换路由类 或者我可以使用第三方库吗 import React fro
  • 在 Android 中获取 Google 地图时出错

    我正在开发一个 Android 应用程序 该应用程序需要 Google 地图 为此 我在以下链接中使用相同的示例 谷歌地图的链接 http www androidhive info 2013 08 android working with
  • Android-decodeBase64 导致应用程序崩溃

    我必须加密一个字符串 但应用程序无法达到加密方法 它在加载时崩溃 我正在使用 Apache Commons Codec 库 private EditText txtPass EditText findViewById R id txtPas
  • BxSlider 将最后一张幻灯片显示为第一张幻灯片

    我创建了 4 个滑块 最初 所有 4 个滑块都是隐藏的 显示 无 因此我使用此代码在单击其各自类别时显示相关滑块 滑块配置 touchEnabled true hideControlOnEnd true preloadImages all
  • 调用(委托)

    谁能解释一下上面写的这个声明link http msdn microsoft com en us library system windows forms control invoke aspx Invoke Delegate 在拥有该委托
  • 区分不可变对象和可变对象的 const 引用

    C 中是否有任何公认的方法来区分对不可变对象和可变对象的 const 引用 e g class DataBuffer class Params class C public Given references must be valid du
  • HERE 地图 JS API 3.1 - Angular 中样式组“非碰撞”错误

    在使用卫星基础层加载 HERE 地图时 有时会出现此错误 Tangram error Error for style group non collision for tile 13 16 15542 12554 15 Cannot read
  • 如何使 sql 作业步骤退出报告失败

    我有一个sql作业步骤 像这样 Declare Result varchar 255 exec myprocedure Result Result output 我想做的事 如果 Result Error 则将作业标记为失败 我该如何实现这
  • 条形图/折线图 - 仅显示最后一个数据点的标签

    我无法获得条形图或折线图来显示 X 轴上的所有标签 正如您在提供的打印屏幕中看到的 只有最新的数据点显示其标签 这是使用场景生成器时的情况 我是否必须有一个带有用于 CategoriesAxis 的字符串的 ObservableList 我
  • PyQt 从 GUI 获取值

    我使用构建了一个用户界面QtDesigner然后转换 ui to py 用户界面有不同comboBox and textBox单击 运行 按钮后我想从中读取值 运行函数 然后在计算完成后填充用户界面的其他文本框 但是当我改变的值comboB
  • 如何解决“重定向已被 CORS 策略阻止:没有“Access-Control-Allow-Origin”标头”?

    我正在开发一个应用程序 使用Vue js 根据我的设置 当设置更改时 我需要将变量传递给我的 URL get http 172 16 1 157 8002 firstcolumn c1v c1b function data some cod
  • STS 报告的动态 Web 模块版本错误

    我使用 Spring 3 0 6 和 Maven 3 0 3 在 STS 2 9 2 中创建了一个 Web 项目 我创建了一些页面和代码 没有任何错误 我已在项目的 pom xml 中将 Spring 库版本从 3 0 6 升级到 3 1
  • 单击更改 div 的颜色和数字

    我想在单击 div 时更改 html 元素的颜色和数量 例如 当您单击up arrow数字从 4 变为 5 颜色也变化 也发生变化 initial state 4 upvoted 5 down voted 3 这是我到目前为止所拥有的 我知
  • PHP导出rtf包含css文件

    我想用php导出rtf文件 但不知道为什么涉及到css文件 当我打开一个带有扩展名的文件时 Rtf 与 Microsoft Office 2007 它说 加载过程中以下区域出现了问题 丢失文件 C Users 用户电脑 Downloads
  • sys.path 包括 py.test rootdir 以使测试相对于项目根目录导入

    我在 pytest 中遇到问题 未将我的项目 rootdir 包含在 sys path 列表中 相反 它包含默认情况下测试所在的目录 这是我的项目结构 proj setup py mypackage init py a py tests t