2013-07-22 46 views
3

重現步驟:獲得一個Python虛擬環境,織物及sudo來一起工作

  1. 在Linux環境中,創建一個名爲「工廠」
  2. 僅供參考,我使用的zsh你的桌面上的文件夾
  3. 光盤~/Desktop/fab
  4. 運行此fabfile.py在./fab目錄由發出fab init

    #!/usr/bin/env python 
    #set up ssh to remote server 
    
    import sys, os, fileinput 
    from fabric.api import * 
    
    def init(): 
        local('mkdir ./virtualenv') 
        local('cd ./virtualenv && virtualenv --no-site-packages venv') 
        local('chown -R user:user ./virtualenv/') 
        local('chmod 770 -R ./virtualenv/') 
        venv = 'source ./virtualenv/venv/bin/activate && ' 
        local(venv+'pip install mysql-python django South') 
    
  5. 得到這個錯誤:從zsh的

    ➜ fab fab init  
    [localhost] local: mkdir ./virtualenv 
    [localhost] local: cd ./virtualenv && virtualenv --no-site-packages venv 
    New python executable in venv/bin/python 
    Installing distribute...........................................................................................................................................................................................................................done. 
    Installing pip................done. 
    [localhost] local: chown -R user:user ./virtualenv/ 
    [lcalhost] local: chmod 770 -R ./virtualenv/ 
    [localhost] local: source ./virtualenv/venv/bin/activate && pip install mysql-python django South 
    /bin/sh: 1: source: not found 
    
    Fatal error: local() encountered an error (return code 127) while executing 'source ./virtualenv/venv/bin/activate && pip install mysql-python django South' 
    
    Aborting. 
    
  6. 運行source ./virtualenv/venv/bin/activate && pip install mysql-python django South,並觀察它的作品。

這是不是有點像this重複的問題,因爲我得到了同樣的錯誤,即使我在我的代碼使用with prefix(

想法?謝謝。

回答

3

source替換爲/bin/bash/。這裏有一個例子:

from fabric.api import * 


def init(): 
    local('virtualenv --no-site-packages venv') 

    venv_command = '/bin/bash venv/bin/activate' 
    pip_command = 'venv/bin/pip install mysql-python django South' 
    local(venv_command + ' && ' + pip_command) 

僅供參考,爲run/sudo,最好使用prefix上下文管理器,像建議here

希望有所幫助。

+1

將這些命令分解爲兩個變量,這樣做也有所不同。 – mh00h

+0

這種作品,但不完全。 'pip_command'項目沒有安裝 - 系統現在只是試圖安裝到系統,而不是虛擬環境(即使'fab init'作爲非root用戶運行)。 – mh00h

+2

如何使用'venv/bin/pip'而不是'pip'? – alecxe