当前位置:  开发笔记 > 编程语言 > 正文

无法通过Fabric在服务器上激活virtualenv

如何解决《无法通过Fabric在服务器上激活virtualenv》经验,为你挑选了1个好方法。

我试图通过我的登台服务器上的Fabric运行一些Django管理命令.

问题是Fabric似乎无法激活virtualenv,因此在执行命令时使用系统python/libs.

在服务器上,Django应用程序使用virtualenv运行(不,我还没有使用virtualenvwrapper ......)

使用Fabric(1.0.1)从我的框运行时,命令可能如下所示:

fabfile方法:

def collectstatic():
    require('settings', provided_by=[production, staging])

    with settings(warn_only=True):
        run('source %(env_path)s/bin/activate && python %(repo_path)s/%(project_name)s/configs/%(settings)s/manage.py collectstatic --noinput -v0' % env)

输出:

$ fab staging master collectstatic
[myserver.no] Executing task 'master'
[myserver.no] Executing task 'collectstatic'
[myserver.no] run: source /home/newsapps/sites/mysite/env/bin/activate && python /home/newsapps/sites/mysite/repository/mysite/configs/staging/manage.py collectstatic --noinput -v0
[myserver.no] Login password: 
[myserver.no] out: Unknown command: 'collectstatic'
[myserver.no] out: Type 'manage.py help' for usage.

我当然知道Django命令collectstatic在1.3之前的版本中不存在,导致med认为系统python(有Django 1.2)正在使用.

我的fabfile /项目布局基于Tribapps家伙的精彩fabfile

所以我创建了一个测试pythonversion的fabric方法:

def pythonver():
    require('settings', provided_by=[production, staging])

    with settings(warn_only=True):

    run('source %(env_path)s/bin/activate && echo "import sys; print sys.path" | python ' % env)

运行时,它提供以下输出:

$ fab staging master pythonver
[myserver.no] Executing task 'master'
[myserver.no] Executing task 'pythonver'
[myserver.no] run: source /home/newsapps/sites/mysite/env/bin/activate && echo "import sys; print sys.path" | python 
[myserver.no] Login password: 
[myserver.no] out: ['', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/pymodules/python2.6', '/usr/lib/pymodules/python2.6/gtk-2.0', 

你可以看到它使用系统python而不是我的virtualenv位于home/newsapps/sites/mysite/env

但是,如果我直接在服务器上运行此命令

source /home/newsapps/sites/mysite/env/bin/activate && echo "import sys; print sys.path" | python 

..然后它从virtualenv输出正确的路径

我做错了什么,因为使用Fabric从我的virtualenv中使用python运行命令?



1> Ken Cochrane..:

你应该从你的virtualenv bin目录中调用python版本,然后你将确保它使用virtualenv的python版本.

/home/newsapps/sites/mysite/env/bin/python /home/newsapps/sites/mysite/repository/mysite/configs/staging/manage.py collectstatic --noinput -v0

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有