使用 conda 环境启动时自动运行脚本

使用 conda 环境启动时自动运行脚本

我已经配置了一个计算映像,其中包含完成此任务所需的一切。当我创建新实例时,我希望实例在启动时自动运行命令。我使用了--metadata带有 的选项google cloud compute create,并提供了脚本。一切都运行良好,直到它需要一些自定义 conda 环境中的应用程序。我尝试在conda activate适用的地方添加,但似乎没有任何效果。在运行此启动脚本时,是否有某种方法可以激活此环境?

答案1

这一点尤其棘手,因为我在测试时遇到了一些注意事项:

一开始,我尝试动态选择脚本的解释器但我马上就意识到这是不可能的。

相反,我选择使用两个不同的启动脚本(init.sh 和 conda.sh),一个用于安装和配置 conda 环境,另一个用于替换现有脚本,后者随后将运行 conda 命令。我这样做的部分原因是带有类似解释器的脚本#!/usr/bin/env python无法在启动脚本中正常运行。我无法确定发生这种情况的确切原因。

这也是必要的,因为一旦安装了 conda,您就需要关闭并重新打开当前的 shell,我通过简单的重启实现了这一点。

请记住,启动脚本以 root 身份运行。

我将这两个脚本托管在 Cloud Storage 中,但只要实例可以访问并下载它们,您可以将它们保存在任何您想要的地方。我在 Debian 9 实例上测试了所有内容。您可以随意编辑其中的任何内容以满足您的需求。

首先,向您的实例添加启动脚本,然后启动它:

gcloud compute instances add-metadata [INSTANCE_NAME] --metadata startup-script-url=gs://[BUCKET]/init.sh

以下是初始化脚本

#!/bin/bash

# Prophylactically update all the packages, optional.
apt -y update && apt -y upgrade

# Downloads and installs miniconda silently
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh
bash ~/miniconda.sh -b -p $HOME/miniconda

# Also prophylactic just to make sure commands run properly
export PATH="$HOME/miniconda/bin:$PATH"

# Initiate the conda environment
conda init

# Make sure the environment is activated by default
conda config --set auto_activate_base true

# Removes the current startup script and replaces it with the other
gcloud compute instances remove-metadata [INSTANCE_NAME] --zone [ZONE] --keys=startup-script-url
gcloud compute instances add-metadata [INSTANCE_NAME] --zone [ZONE] --metadata startup-script-url=gs://[BUCKET]/conda.sh

# Necessary to run conda commands still within a startup script (workaround to close and re-open your current shell)
reboot

以下是conda工具

#!/bin/bash

# Again, prophylactic just to make sure commands run properly
export PATH="$HOME/miniconda/bin:$PATH"

# Simple test to make sure everything works
conda -V > /condatest.txt

如果 condatest.txt 填充了您安装的版本(在我的情况下是 conda 4.7.10)则表示您成功了。

最后,非常重要的一点是调整您的云 API 访问范围将您的实例设置为 Compute Engine 读/写,因为默认情况下,您将无法在实例内部编辑实例的元数据(我遇到了类似的事情)。

如果你需要调试工具,你可以启用串行控制台输出查看实例在启动过程中执行的操作,您还可以在启用调试的情况下手动运行启动脚本查看哪里崩溃了。

答案2

在 Windows 上,我获得了 anaconda powershell 提示符快捷方式链接并使用批处理自动运行 python 代码:

cd <python code folder>

%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& 'C:\Users\<youruser>\anaconda3\shell\condabin\conda-hook.ps1' ; conda activate 'C:\Users\<youruser>\anaconda3\envs\<myProjectEnv>\' ; python autorun.py runserver 0.0.0.0:1234 "

在里面-命令你可以设置环境参数然后运行你的 py

相关内容