在虚拟机中运行Python3的IPython笔记本

3 投票
2 回答
785 浏览
提问于 2025-04-18 02:11

我正在努力搭建一个简单的虚拟机,用来运行基于Python3的IPython笔记本。

我觉得最好的办法是为Python设置一个虚拟环境,然后在里面安装所需的库,再启动IPython服务器。不过,也许把创建虚拟环境的过程放到一个脚本里会更好?

更新:我遇到的一个主要问题是路径不完整……

##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命令。

但是,如果我尝试用手动安装的内容重新配置机器,仍然会出现错误?

'source testpy3/bin/activate'没有被指定路径。请指定命令或路径。

解决这个问题的方法是:https://ask.puppetlabs.com/question/2177/how-to-execute-source-command/。解决方案是:command => "/bin/bash -c 'source testpy3/bin/activate'"

但又出现了一个新问题:错误:/Stage[main]/Infinite_interns::Box::Python3/Exec[py3-venv]/returns: 从不运行到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安装额外模块之前被安装和执行,但在虚拟机的虚拟环境中我看不到安装的库?

所以现在的问题是:puppet能否在虚拟环境testpy3中通过pip安装库?还是说我不如不使用虚拟环境,直接调用python3和相关工具?

答案:我放弃了虚拟环境,决定“直接”在全局范围内运行python3。我在ubuntu上,所以需要按照https://askubuntu.com/questions/412178/how-to-install-pip-for-python-3-in-ubuntu-12-04-lts中描述的方式安装pip;使用pip3作为提供者,https://github.com/bodepd/puppet-pip/blob/master/lib/puppet/provider/package/pip3.rb

接下来看看这是否有效……

PS:下一步是通过etc/init中的一个文件让笔记本运行——这样做可以吗?(我还没做到那一步!)这样做可能有效吗,还是说Python 3下的IPython笔记本使用不同的启动方式?!

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

2 个回答

0

要在虚拟机上搞定 Python 3 和 IPython Notebook,其实很简单。你只需要先安装一个叫做 数据科学工具箱,然后用 apt-get 命令安装 ipython3、ipython3-notebook、python3-pip 和 python3-dev。这些东西和现在的 数据科学工具箱版本配合得很好。

0

需要说明的是,我还没有完全搞定这个东西(也就是说,它有时候能用,有时候又不行,有些重装能成功,有些却不行[似乎会受到你之后安装的其他软件包的影响,还有就是不干净的DST安装等等])。不过,你可以试着根据数据科学工具箱来搭建你的虚拟机,具体可以在这里找到:http://datasciencetoolbox.org/。在我们办公室,我们也在为学生制作一个基于Python 3和IPython的软件包。

总之,我非常非常想和你聊聊vagrant、python3和ipython之间的互动。

撰写回答