我已经配置了一个计算映像,其中包含完成此任务所需的一切。当我创建新实例时,我希望实例在启动时自动运行命令。我使用了--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