2013-07-22 2 views
3

Шаги для воспроизведения:Получение Python виртуальной среды, ткани и Судо работать вместе

  1. В среде Linux, создать папку на рабочем столе под названием «ВСБ»
  2. FYI, я использую ЗШ
  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. Получить эту ошибку:

    ➜ 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 из Zsh, и наблюдать, что он работает.

Это не дублирует вопрос о чем-то вроде 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) 

FYI, для run/sudo это лучше использовать prefix контекста менеджера, как предложил here.

Надеюсь, что это поможет.

+1

Разбиение команд на две переменные, подобные этим, также имело значение. – mh00h

+0

Этот вид работ, но не полностью. Проекты 'pip_command' не устанавливаются - теперь система просто пытается установить в систему, но не виртуальную среду (даже если' fab init' запускается как пользователь без полномочий root). – mh00h

+2

Как насчет использования 'venv/bin/pip' вместо просто' pip'? – alecxe

 Смежные вопросы

  • Нет связанных вопросов^_^