【发布时间】:2025-11-26 02:20:03
【问题描述】:
我正在努力组装一个简单的 VM,我可以用它在 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' is not qualified and no path was specified. Please qualify the command or specify a path.
解决这个问题:source不合格问题的解决方案可以在这里找到: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:从 notrun 更改为 0 失败:/usr/bin/virtualenv --no-site-packages --python=/usr/bin/python3 testpy3 在 /vagrant/modules/infinite_interns/manifests/box/python3.pp:14 返回 1 而不是 [0] 之一 p>
DOH - 在我的 实际 脚本中,我有 /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 的东西,但是在它执行时我看不到 virtualenv 中安装的库在虚拟机中?
所以现在的问题是:puppet pip 可以将库安装到 virtualenv testpy3 中吗?或者我最好不要使用 virtualenv,直接调用 python3 和相关工具?
ANSWER:我已经放弃了 virtualenv,并准备在全局范围内“只”运行 python3。我在ubuntu上,所以需要easy_install3 pip,如https://askubuntu.com/questions/412178/how-to-install-pip-for-python-3-in-ubuntu-12-04-lts中所述;使用 pip3 作为提供者,https://github.com/bodepd/puppet-pip/blob/master/lib/puppet/provider/package/pip3.rb
在 PS 位上看看是否有效..
PS 下一步将是通过 etc/init 中的文件让笔记本运行 - 下面会这样做吗? (我还没有到那一步!)这可能有效还是 python 3 下的 IPython notebook 使用不同的起始咒语?!
script
export HOME="/root"
/vagrant/notebooks/ipython3 notebook --ip 0.0.0.0
end script
【问题讨论】:
-
你试过完整路径吗,比如
source /usr/bin/python3/testpy3/bin/activate? -
@AndyHayden 嗯......不 - 这似乎不起作用?无论如何都会创建 testpy3 目录吗? (我尝试了文件上的各种绝对路径以达到相同的效果?)
-
我不确定它会在哪里创建,但也许如果你能找到它,你可以使用完整路径。首先认为它可能在某处的主文件夹中,但不记得了......
-
你为什么使用虚拟机?
-
@filmor 我们正在打包一个虚拟机供远程教育学生使用 - 预装了各种库和数据库,因此他们可以使用任何平台、云虚拟机等
标签: python python-3.x vagrant puppet ipython-notebook