我有一个简单的分布式脚本,该脚本从文件中读取主机列表并为我部署SSH群集(到目前为止非常好)。我不使用dask-worker
命令行工具,因为我希望一切都从一个父python脚本启动。我想使用这样设置的集群来使用subprocess.run
或在工作节点上执行类似的操作来运行各种作业。
我要运行的进程是python作业,需要在适当的conda环境中启动。这就是我遇到的问题:尝试激活conda环境会使我在Your shell has not been properly configured to use 'conda activate'.
中得到stderr
。
我正在将subprocess.run
与shell=True
一起使用。鉴于我的普通shell已设置为使用conda,因此我对该错误感到有些惊讶。
敏捷的分布式工作者似乎具有非常有限的环境(我的.bashrc
未加载),而且我似乎甚至无法提供源文件来尝试将其添加到环境中。如果我使用非分布式设置(distributed.Client()
),则激活相关的conda env没有问题,因此我想这与dask分布式远程工作者环境的工作方式有关。我知道conda和相关环境在远程节点上可用(它们都安装了相同的文件系统)。
所以,有一种简单的方法可以对一个敏捷的分布式远程工作者说:“使用此conda环境启动此python脚本”,最好使用subprocess.run
?
这原来是bash
使用问题,而不是与dask
有关。
如果我们强制bash
是交互式的,那么我们将获得期望的环境并可以运行作业。我寻找了一个更优雅的解决方案,但是您很快就陷入困境,以为您的发行版认为应将其用作登录vs非登录shell,交互式vs非交互式shell环境的细节陷入困境。