【发布时间】: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在系统范围内执行此操作吗?稍后我可能会尝试重现错误。