重现步骤:
- 在 Linux 环境中,在桌面上创建一个名为“fab”的文件夹
- 仅供参考,我正在使用 zsh
- cd to
~/Desktop/fab
-
运行这个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')
-
得到这个错误:
➜ 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.
Run source ./virtualenv/venv/bin/activate && pip install mysql-python django South
从 zsh 中,观察它是否有效。
这不是类似的重复问题this https://stackoverflow.com/questions/1180411/activate-a-virtualenv-via-fabric-as-deploy-user,因为即使我使用with prefix(
在我的代码中。
有任何想法吗?
Replace source
with /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 https://stackoverflow.com/a/5359988/771848.
希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)