我正在努力组建一个简单的虚拟机,以便在Python3上运行IPython笔记本。我认为最好的方法是为Python设置一个虚拟环境,然后在启动IPython服务器之前将所需的库安装到其中,但也许更好的方法是将虚拟环境创建分离成一个shell脚本?更新:我遇到的一个主要问题是路径不完整...
如果我ssh进去并手动安装所有东西,我可以从命令行中很好地运行source命令。
但是,如果我尝试用手安装的东西重新提供机器,我仍然会遇到错误?
“源testpy3 / bin / activate”没有合格,也没有指定路径。请限定命令或指定路径。'的解决方案:该问题的解决方案可以在此处找到:https://ask.puppetlabs.com/question/2177/how-to-execute-source-command/。解决方案是:
天哪,在我的实际脚本中,我有
所以现在都很好...
更新2 - 或者不..我添加了
所以现在的问题是: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
##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