gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:24:44 25 4
gpt4 key购买 nike

我正在尝试通过 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/项目布局基于 great fabfile of the Tribapps guys

所以我创建了一个 fabric 方法来测试 python 版本:

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 而不是我位于 home/newsapps/sites/mysite/env 的 virtualenv

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

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

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

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

最佳答案

您应该从您的 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

关于python - 无法通过 Fabric 在服务器上激活 virtualenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com