Възможен дубликат:
Активирайте virtualenv чрез тъкан като потребител за внедряване
Посъветваха ме да опитам да използвам fabric за внедряване на Django на производствен сървър и автоматизиране на задачи чрез използване на python вместо bash.
Исках да започна лесно и просто да автоматизирам активирането на моя virtualenv и да стартирам сървъра за разработка на Django в него.
Създадох файл с име fabfile.py:
from fabric.api import local
def activate_env():
local("source /.../expofit_env/bin/activate")
def run_local_server():
local("/.../server/manage.py runserver")
def start():
activate_env()
run_local_server()
Въпреки това, когато бягам
fab start
получавам следното съобщение:
[localhost] local: source /.../expofit_env/bin/activate
/bin/sh: 1: source: not found
Fatal error: local() encountered an error (return code 127) while executin
'source /.../expofit_env/bin/activate'
какво правя грешно
Актуализация
Въз основа на предложението на Burhan Khalid, опитах следното:
....
def activate_env():
local("/bin/bash /.../expofit_env/bin/activate")
....
Просто бягане
fab activate_env
резултати:
[localhost] local: /bin/bash /.../expofit_env/bin/activate
Done.
След изпълнението обаче virtualenv не се активира. За следния код:
def start_env():
with prefix('/bin/bash /.../expofit_env/bin/activate'):
local("yolk -l")
Все още получавам грешка, сякаш virtualenv не е активиран.
alan@linux ~/Desktop/expofit $ fab start_env
[localhost] local: yolk -l
/bin/sh: 1: yolk: not found
Когато ръчно активирам virtualenv, жълтъкът работи добре:
alan@linux ~/.../expofit_env $ source bin/activate
(expofit_env)alan@linux ~/.../expofit_env $ yolk -l
DateUtils - 0.5.2 - active
Django - 1.4.1 - active
Python - 2.7.3rc2 - active development (/usr/lib/python2.7/lib-dynload)
....
Актуализация
Опитах нов подход от този въпрос.
from __future__ import with_statement
from fabric.api import *
from contextlib import contextmanager as _contextmanager
env.activate = 'source /.../expofit_env/bin/activate'
@_contextmanager
def virtualenv():
with prefix(env.activate):
yield
def deploy():
with virtualenv():
local('yolk -l')
Дава същата грешка:
[localhost] local: yolk -l
/bin/sh: 1: source: not found
Fatal error: local() encountered an error (return code 127) while executing 'yolk -l'
Aborting.
Дори тесто първата команда преминава без грешки:
alan@linux ~/.../expofit_env/bin $ fab virtualenv
[servername] Executing task 'virtualenv'
Done.
Актуализация
Възможно е да стартирате local
с персонализирана обвивка.
from fabric.api import local
def start_env():
local('source env/bin/activate',shell='/bin/bash')
Това обаче не активира virtualenv, сякаш беше направено ръчно.
source
, трябва да е/bin/bash /path/to/bin/activate
- person Burhan Khalid   schedule 03.10.2012Имам съществуваща таблица, която съдържа всякаква информация за клиента. В момента той също има "град", както и "регион" и "щат", изброени в 3 колони като низове. Излишна информация!
Бих искал да създам три нови таблици, една за града и една за региона и една за щата, които ще съдържат единични записи за всеки от градовете и т.н., и след това да препратя ID обратно към съществуващата клиентска таблица с location_id.
Как бих могъл да експортирам отделните имена на градове в таблицата на градовете и отделните региони в таблица с региони, а след това градовете да препращат към таблицата region_id и state_id, така че цялата информация да е групирана!
Аматьорски въпрос със сигурност, но оценявам всяка помощ!
- person TheMeaningfulEngineer   schedule 04.10.2012source
, поради което продължавате да получавате същата грешка. - person Burhan Khalid   schedule 04.10.2012source
там. Втората актуализация е решение, базирано на втория отговор. - person TheMeaningfulEngineer   schedule 04.10.2012source
, използвайкиsh
като обвивка -- въпреки че моятenv.shell
е зададен правилно). - person simon   schedule 13.07.2013env.shell
?/bin/bash -l -c
трябва да го направи. - person Dave   schedule 23.08.2013source env/bin/activate
като шел скрипт също не активира virtualenv. - person TheMeaningfulEngineer   schedule 16.09.2013--rcfile
през плат. - person TheMeaningfulEngineer   schedule 16.09.2013