【问题标题】:Setup remote environment when using xdist使用 xdist 时设置远程环境
【发布时间】:2014-12-11 16:03:07
【问题描述】:

我目前正在开展一个项目,该项目涉及要在远程主机 (bash) 上运行的测试。 不幸的是,远程 python 解释器不尊重可用的站点包(它是一个嵌入式的:abaqus python (2.6))。但是,使用 PYTHONPATH 变量可以指定本地安装并使其他包可用。因此,在远程机器上,我只需将相应的行添加到我的 .bashrc 文件中。

不幸的是,当使用 xdist 分发测试时,只会调用“裸”bash,而没有加载任何配置文件特定的 rcs。因此,测试失败并出现一些导入错误,因为 pytest 所需的 argparse 不可用。

有没有办法在远程主机开始执行任何 pytest 代码(需要 argparse)之前设置它?换句话说,有没有办法在 pytest 导入开始之前在主机上添加环境变量?

我尝试使用具有会话范围和autouse=True 的固定装置(当然)不起作用。此外,我尝试了类似

# in conftest.py
import sys    
def pytest_configure_node():
    sys.path.insert(1, "/somepath/")
    print sys.path

这看起来像是在远程主机上执行的,但是 sys.path 仍然是主机之一,并且仍然无法导入 argparse 模块。

我使用

开始测试
py.test --tx ssh=user@server//python="abaqus613 python" -vs --dist=each --rsyncdir foo

这会启动正确的 Python 解释器(Abaqus 6.13-2 的 Python 2.6.2),但会失败

ImportError: No module named argparse

【问题讨论】:

  • 你用什么命令来运行xdist
  • @ReutSharabani 请查看我更新的问题。
  • 手动测试时,您使用哪一行在 .bashrc 中设置 PYTHONPATH?
  • 类似export PYTHONPATH=/path/to/argparse/library
  • 想要添加:--rsyncdir /local/path/to/argparse argparse 工作吗?它应该将 argparse 同步到远程目录。我不确定如何在不破坏内容的情况下远程执行此操作。当你说bare bash时,你是什么意思?您是否在登录用户的环境中添加了 PYTHONPATH?您可以使用/etc/environment~/.profile 在系统范围内执行此操作吗?稍后我可能会尝试重现错误。

标签: python pytest


【解决方案1】:

我终于想出了一个相当老套但合理可行的方法。可以在 python 调用中指定一系列命令,因此我在调用 abaqus python 之前获取了一个设置环境的脚本。

安装脚本 (setup.sh),位于远程机器上,如下所示:

export PYTHONPATH=/path/to/libraries

现在是完整的通话

py.test --tx ssh=user@server//python="source setup.sh;abaqus613 python" -vs --dist=each --rsyncdir foo

这样我就可以在 abaqus python 中获得必要的导入。

【讨论】:

    【解决方案2】:

    我的插件https://github.com/pytest-dev/pytest-cloud 应该可以帮到你

    它会自动将python虚拟环境同步到slave,一个要求是你的virtualenv文件夹应该在test文件夹所在的文件夹内

    在 rsync 之后,它还会激活虚拟环境,因此您的所有依赖项都正确存在

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 2014-03-15
      • 1970-01-01
      • 2014-08-11
      • 2016-07-15
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多