通过chef recipe激活VirtualNV并安装python库

通过chef recipe激活VirtualNV并安装python库,python,virtualenv,chef-infra,Python,Virtualenv,Chef Infra,我有一个python包需要安装在virtualenv中。这是一个虚拟服务器,由下面显示的厨师食谱提供。我尝试了多种变体来激活virtualenv,但没有骰子。欢迎指点 python_virtualenv "/home/vagrant/myenv" do interpreter "python2.7" owner "vagrant" group "vagrant" action :create end directory "/usr/local/mysource" do

我有一个python包需要安装在virtualenv中。这是一个虚拟服务器,由下面显示的厨师食谱提供。我尝试了多种变体来激活virtualenv,但没有骰子。欢迎指点

python_virtualenv "/home/vagrant/myenv" do
  interpreter "python2.7"
  owner "vagrant"
  group "vagrant"
  action :create
end



directory "/usr/local/mysource" do
  owner "vagrant"
  group "vagrant"
  mode 0755
  action :create
end



git "/usr/local/mysource/django" do
  repository "https://github.com/django/django"
  revision "master"
  action :sync
end


script "install_script" do
  interpreter "bash"
  user "vagrant"
  cwd "/usr/local/mysource/django"
  code <<-EOH
  activate_env=os.path.expanduser("/home/vagrant/myenv/bin/activate_this.py")
  execfile(activate_env, dict(__file__=activate_env))
  python setup.py install
  EOH
end
python\u virtualenv”/home/vagrant/myenv“do
解释器“python2.7”
业主“流浪汉”
“流浪汉”群体
行动:创建
结束
目录“/usr/local/mysource”do
业主“流浪汉”
“流浪汉”群体
模式0755
行动:创建
结束
git“/usr/local/mysource/django”do
存储库“https://github.com/django/django"
修订版“母版”
行动:同步
结束
脚本“安装脚本”执行
解释器“bash”
用户“流浪者”
cwd“/usr/local/mysource/django”
代码我使用该资源在virtualenvs中安装python包。这应该相当于pip安装-e。

python_pip "/usr/local/mysource/django" do
  virtualenv "/home/vagrant/myenv"
  options '-e'
end
要在虚拟环境中运行其他命令(syncdb、collectstatic等),我通常使用以下模式:

virtualenv = "/home/vagrant/myenv"
bash "install_website" do
  code "#{virtualenv}/bin/python setup.py install"
  user "vagrant"
  cwd "/usr/local/mysource/django"
end

python_pip是一本不推荐使用的食谱。改用

要安装Python 2的最新可用版本,然后使用它创建virtualenv并安装一些软件包,请执行以下操作:

directory "/opt/myapp" do
  owner "vagrant"
  group "vagrant"
  mode 0755
  action :create
end

python_runtime '2'

python_virtualenv '/opt/myapp/.env'

python_package 'Django' do
  version '1.8'
end

pip_requirements '/opt/myapp/requirements.txt'

我不想使用非常过时和废弃的python/pip厨师烹饪书,所以我设法手动操作

  • 创建shell脚本
    templates/default/flask\u install\u with\u venv.sh.erb
    ,并将其放置在模板的某个位置
  • 使用以下命令执行脚本:

  • 成功了。非常感谢!:)
    #!/bin/bash
    source <%= @venv_path %>/bin/activate
    pip3 install flask
    pip3 install uwsgi
    deactivate
    
    template "/tmp/flask_install_with_venv.sh" do
      source "flask_install_with_venv.sh.erb"
      variables ({
        'venv_path' => venv_path
      })
    end
    
    execute 'flask_install_with_venv' do
      command '/bin/bash /tmp/flask_install_with_venv.sh'
    end