如何配置全局主管以使用 pyenv 和 virtualenv

Posted

技术标签:

【中文标题】如何配置全局主管以使用 pyenv 和 virtualenv【英文标题】:How to configure global supervisor to use pyenv and virtualenv 【发布时间】:2015-03-13 09:08:53 【问题描述】:

我正在将 Django 安装从 1.4 升级到 1.7,这意味着我也在从 Python 2.6.6 迁移到 Python 2.7。生产服务器使用 Debian 6.09,全局需要 python 2.6,不幸的是升级操作系统目前不是一个有效的解决方案。

为了解决这个问题,我安装了以下堆栈:

pyenv 与 python 2.7 虚拟环境 virtualenvwrapper uwsgi supervisor(从全局python 2.6安装,以root身份运行) nginx

当我从 virtualenv 手动运行 uwsgi 时,该站点运行良好。但是,当我用supervisor启动它时,它只会使用全局python安装。

作为 virtualenv 的用户:

(django1.7)user@staging:~$ echo $PATH
/home/user/.virtualenvs/django1.7/bin:/home/user/.pyenv/shims:/home/user/.pyenv/bin:/usr/local/bin:/usr/bin:/bin

我的主管配置文件:

[program:app]
command = /home/user/.virtualenvs/django1.7/bin/uwsgi
  --module app.wsgi
  --socket 127.0.0.1:10001
  --master
  --harakiri 120
  --max-requests 5000
  --threads 6
directory=/home/user/app/
environment=PATH="/home/user/.virtualenvs/django1.7/bin:/home/user/.pyenv/shims:/home/user/.pyenv/bin:",DJANGO_SETTINGS_MODULE="app.settings",HOME="/home/user"
user=user
autostart=true
autorestart=true
redirect_stderr=true
stopsignal=QUIT

谁能帮忙指出我的配置哪里出错了?

谢谢!

【问题讨论】:

【参考方案1】:

uWSGI 有一个特定的virtualenv 配置指令:

  virtualenv=/home/user/.virtualenvs/django1.7

另一个例子:

https://github.com/miohtama/LibertyMusicStore/blob/master/conf/uwsgi.ini

更多信息

http://uwsgi-docs.readthedocs.org/en/latest/tutorials/dreamhost.html?highlight=virtualenv

(看起来关于 virtualenv 的 uWSGI 文档有点混乱,我可能需要与作者仔细检查)

【讨论】:

感谢您的帮助 - 我最终没有修改 wsgi 配置,这对我来说是一件愚蠢的事情。【参考方案2】:

我发布的配置最终可以正常工作。我很愚蠢,没有先运行 supervisorctl update 以确保它加载到更新的配置中。

【讨论】:

以上是关于如何配置全局主管以使用 pyenv 和 virtualenv的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyenv 工具管理和安装多个 python 版本

在erlang中注册全局主管和本地主管有啥区别

Linux下python开发环境配置

虚拟环境工具pyenv的安装,配置和使用,完美控制python版本

pyenv的使用

使用 pyenv 管理 Python 版本