【问题标题】:Activating virtualenv via chef recipe and install python library通过厨师食谱激活virtualenv并安装python库
【发布时间】:2014-04-23 09:37:48
【问题描述】:

我有一个 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 virtualenv chef-infra


    【解决方案1】:

    我不想使用相当过时和废弃的 python/pip 厨师食谱,所以我设法手动完成。

    1. 创建 shell 脚本 templates/default/flask_install_with_venv.sh.erb 并用 template 把它放在某个地方。
    #!/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
    
    1. 使用以下命令执行脚本:
    execute 'flask_install_with_venv' do
      command '/bin/bash /tmp/flask_install_with_venv.sh'
    end
    

    【讨论】:

      【解决方案2】:

      python_pip 是不推荐使用的食谱。请改用poise-python

      安装最新可用版本的 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'
      

      【讨论】:

        【解决方案3】:

        我使用python_pip 资源在 virtualenvs 中安装 python 包。这应该等同于pip install -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
        

        【讨论】:

        • 做到了。非常感谢! :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多