Vagrant安装Anaconda Python?

12 投票
6 回答
5973 浏览
提问于 2025-04-18 17:22

Anaconda Python 是通过一个 bash 脚本在 Linux 系统上安装的。我想用 Vagrant 的配置功能来安装 Anaconda Python。

在这个 bash 脚本中(参考文档中的 bootstrap.sh 示例),我有一个 bootstrap.sh 脚本,它的步骤是:

  1. wget 下载安装脚本
  2. chmod +x 让它可以执行
  3. ./<script>.sh 来进行安装。

这样安装会失败,因为安装过程中有几个提示,其中一个需要输入非默认的答案。

有没有办法通过 bash 脚本来自动完成安装?如果不行,是不是必须使用像 Puppet 这样的工具?我对 Puppet 完全不了解,所以一直想避免使用……也许是时候深入学习一下了?

最终目标是打包 Vagrantfile,而不是托管一个 Vagrant box。

附言:我最开始的尝试使用了 Linux 的 yes 命令,但一定还有更好的方法!

6 个回答

1

Puppet 并不能让这个任务变得更简单,因为运行需要互动的脚本并不是它的主要功能(我甚至不相信通过第三方模块可以实现这一点)。

不过,有更好的方法,那就是使用 expect 工具。这个工具可以让你写一个强大的脚本,来与安装过程中的输入提示进行互动。

2

这里有一个 expect 脚本文件,用于在 Vagrant 上安装 Anaconda(Anaconda-2.0.1-Linux-x86_64.sh):

#!/usr/bin/expect
#exp_internal 1
set timeout 600
spawn /tmp/Anaconda-2.0.1-Linux-x86_64.sh
send "\r"
send " "
send " "
send " "
send " "
send " "
expect -exact "\[no\] >>>"
send "yes\r"
expect -exact "\[/home/vagrant/anaconda\] >>>"
send "\r"
expect -exact "\[no\] >>>"
send "yes\r"

取消注释 exp_internal 1 可以查看匹配的超时时间,这个时间是 Anaconda 安装所需的, 在我的机器上花了 390 秒。

补充:我实际上已经完成了一个可以正常工作的 Vagrant 环境,里面有 Anaconda,链接在这里: https://github.com/colour-science/colour-vagrant

4

对于想要从头开始使用Anaconda创建新环境的人,可以通过使用来自continuumio的anaconda3环境(或者其他Anaconda环境)来实现。只需要用下面的命令来初始化Vagrant。

vagrant init continuumio/anaconda3; vagrant up --provider virtualbox

这里还有其他一些conda和miniconda环境。这个方法很简单,但如果你想在已有的环境中添加conda,Phil Cooper的解决方案会更合适。

4

我根据 Phil Cooper 的回答创建了一个GitHub仓库。

https://github.com/tomohiro1221/vagrant-anaconda

20

在你的bootstrap.sh文件中,只需要加入类似下面的内容:

miniconda=Miniconda3-3.7.4-Linux-x86_64.sh
cd /vagrant
if [[ ! -f $miniconda ]]; then
    wget --quiet http://repo.continuum.io/miniconda/$miniconda
fi
chmod +x $miniconda
./$miniconda -b -p /opt/anaconda

cat >> /home/vagrant/.bashrc << END
# add for anaconda install
PATH=/opt/anaconda/bin:\$PATH
END

-b这个选项是批处理模式,这正是你需要的:

>>>> ./Miniconda-3.7.0-Linux-x86_64.sh -h 
usage: ./Miniconda-3.7.0-Linux-x86_64.sh [options]

Installs Miniconda 3.7.0

    -b           run install in batch mode (without manual intervention),
                 it is expected the license terms are agreed upon
    -f           no error if install prefix already exists
    -h           print this help message and exit
    -p PREFIX    install prefix, defaults to /Users/phil/miniconda

我通常会把Miniconda(或者它的链接)直接放在"vagrant"文件夹里,也就是bootstrap.sh所在的地方。这样的话,在每次运行vagrant up(在初始化或销毁之后)时,就不用再从网上下载了。

撰写回答