在虚拟机中使用Python3运行IPython Notebook

3
我正在努力组建一个简单的虚拟机,以便在Python3上运行IPython笔记本。我认为最好的方法是为Python设置一个虚拟环境,然后在启动IPython服务器之前将所需的库安装到其中,但也许更好的方法是将虚拟环境创建分离成一个shell脚本?更新:我遇到的一个主要问题是路径不完整...
##Vagrantfile

Vagrant.configure("2") do |config|

  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.ssh.forward_x11 = true

  config.vm.provision :puppet, 
    :options => "--modulepath=/vagrant/modules" do |puppet|
    puppet.manifests_path = "."
    puppet.manifest_file = "site.pp"
  end

  config.vm.define :python3 do |python3|
    python3.vm.hostname = "python3"
    python3.vm.provider :virtualbox do |virtualbox|
      virtualbox.name = "python3"
    end
    python3.vm.network :forwarded_port, guest: 8888, host: 8888
  end
end

###site.pp
node default {
  include testVM
}


#in modules/testVM//manifests/box/python3.pp
class testVM::box::python3 {
  #I was hoping this require statement would install python3 & virtualenv first?
  require python3::base

  #But it doesn't seem to because the following exec runs first and fails?
  #ssh'ing into the VM and the base packages didn't install?
  exec {
    'py3-venv':
      command => '/usr/bin/virtualenv --python=/usr/bin/python3 testpy3',
      require => Package['openssh-server','python-virtualenv'];
  ##I think problem is narrowed down to this - how do I run source or . ?
    'py3-activate':
      command => 'source testpy3/bin/activate',
      require=>Exec['py3-venv'];
  }

  #Try to add in a dependency to force package install - still doesn't work?
  Package['python3']->Exec['py3-venv'] 

  #Install in a small package to check it appears in python3 env
  package {
    [
      'ipythonblocks'
    ]: ensure   => latest,
       provider => 'pip';
  }
}

#I assumed this would install before the exec fired but it doesn't seem to?
class testVM::box::python3::base {
  package { 'python3':
    ensure => latest
  }
  package {
    [ 'ipython3',
      'python-virtualenv'
    ]: require => Package['python3'];
  }
}

如果我ssh进去并手动安装所有东西,我可以从命令行中很好地运行source命令。
但是,如果我尝试用手安装的东西重新提供机器,我仍然会遇到错误?
“源testpy3 / bin / activate”没有合格,也没有指定路径。请限定命令或指定路径。'的解决方案:该问题的解决方案可以在此处找到:https://ask.puppetlabs.com/question/2177/how-to-execute-source-command/。解决方案是:command => "/bin/bash -c 'source testpy3/bin/activate'" 但是又出现了一个新问题:err:/ Stage [main] / Infinite_interns :: Box :: Python3 / Exec [py3-venv] / returns:从notrun更改为0失败:/ usr / bin / virtualenv –-no-site-packages --python = /usr/bin/python3 testpy3返回1而不是[0]之一在 / vagrant / modules / infinite_interns / manifests / box / python3.pp:14
天哪,在我的实际脚本中,我有/usr/bin/virtualenv –-no-site-packages --python=/usr/bin/python3 testpy3,它应该只是 /usr/bin/virtualenv --python=/usr/bin/python3 testpy3
所以现在都很好...
更新2 - 或者不..我添加了Exec ['py3-venv'] -> Package ['ipythonblocks'],以确保在尝试通过pip安装附加模块之前安装和执行virtualenv的内容,但是虽然它执行,我看不到已安装库在VM中的virtualenv中?
所以现在的问题是:puppet可以将库pip安装到虚拟环境testpy3中吗?还是我最好不使用virtualenv,直接调用python3和相关工具?
答案:我已经放弃virtualenv,并正在为“仅”在全局范围内运行python3而解决。我在ubuntu上,因此需要像https://askubuntu.com/questions/412178/how-to-install-pip-for-python-3-in-ubuntu-12-04-lts中描述的那样轻松安装3 pip;要使用pip3作为提供程序,请https://github.com/bodepd/puppet-pip/blob/master/lib/puppet/provider/package/pip3.rb

PS 下一步将是通过 etc/init 文件使笔记本运行 - 以下内容是否可行?(我还没有做到那一步!)这是否可能有效,或者IPython notebook在Python 3下使用不同的启动咒语?

script
  export HOME="/root"
  /vagrant/notebooks/ipython3 notebook --ip 0.0.0.0
end script

你尝试过使用完整路径吗?例如 source /usr/bin/python3/testpy3/bin/activate ? - Andy Hayden
@AndyHayden 嗯...不行-这似乎不起作用?那是测试py3目录会被创建的地方吗?(我尝试了各种文件的绝对路径,但效果相同?) - psychemedia
我不确定它会被创建在哪里,但也许如果你能找到它,你可以使用完整路径。起初我以为它可能在主文件夹的某个地方,但是现在想不起来了... - Andy Hayden
你为什么要使用虚拟机? - filmor
@filmor 我们正在为远程教育学生打包一个虚拟机 - 预装有各种库和数据库,以便他们可以在任何平台、云虚拟机等上使用。 - psychemedia
2个回答

0

请注意,我还没有成功地使它可靠地运行(也就是说,它有时会起作用,然后停止工作,有些重新安装可以工作,而有些则不能[似乎受到在之后安装的其他软件包、非干净的DST安装等因素的影响]),你可以在这里找到基于数据科学工具箱建立虚拟机的方法:http://datasciencetoolbox.org/。在我们的办公室中,我们还为学生们制作了一个基于Python 3和IPython的软件包。

无论如何,我非常非常有兴趣与您讨论Vagrant、Python3和IPython之间的互动关系。


嗨,Rachel - 我现在有一个有点可用的虚拟机,并包含一系列数据工具 - pandas、mongodb、postgresql、openrefine。很乐意与您分享构建并进一步交流 - tony DOT hirst THAT'LL_BE_AT open DOT ac uk。 - psychemedia
嗨,托尼,那是托尼·赫斯特吗?你知道的,在open.ac.uk上是tony.hirst@还是tony.hirst. ..acuk?或者是.. .ac? - rachel

0
安装Data Science Toolbox,然后使用apt-get安装ipython3、ipython3-notebook、python3-pip和python3-dev,就可以轻松地获得一个带有Python 3和IPython Notebook的工作VM。在当前版本的Data Science Toolbox中,这种方法似乎运行良好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接