Debian 7 + django + gunicorn + virtualenv:site-packages的egg-link不在pythonpath中
背景:
- 使用的是 Debian 7 系统
- 安装了 gunicorn(是通过 Debian 的软件包安装的,这样可以使用 /etc/gunicorn.d 的配置)
- 项目的依赖包是通过 pip 在一个虚拟环境中安装的
依赖包是通过命令 pip install -r requirements.txt 安装的。在这个文件里,我们有 3 个来自 GitHub 仓库的包。
比如:
-e git+https://github.com/truc/bidule.git#egg=bidule-master
这是我的 gunicorn.d 配置:
CONFIG = {
'mode': 'django',
'environment': {
'PYTHONPATH': '/path/to/my/django/project/:/path/to/virtualenv/lib/python2.7/site-packages/',
'PRODUCTION': '1',
},
'working_dir': '/path/to/my/django/project/',
'user': 'user',
'group': 'group',
'args': (
'--bind=127.0.0.1:8090',
'--workers=3',
# '--worker-class=egg:gunicorn#sync',
#'--timeout=30',
#'--preload',
'myproject.settings'
),
}
但是这 3 个 GitHub 包并不在 /path/to/virtualenv/lib/python2.7/site-packages/ 目录下,所以找不到这些模块。
我注意到有一个文件:bidule.egg-link,它里面包含了指向 /path/to/virtualenv/src/bidule-master 的路径。
目前我找到的唯一解决办法是手动把这些包的路径添加到 gunicorn.d 配置里的 PYTHONPATH 中。
'PYTHONPATH': '/path/to/my/django/project/:/path/to/virtualenv/src/bidule-master/:/path/to/virtualenv/lib/python2.7/site-packages/',
我的问题是,有没有办法不需要手动把每个 GitHub 包都放到 pythonpath 里?
谢谢
1 个回答
3
首先,Gunicorn这个工具专门为Django设计的模式已经不再使用了,Django 1.7之后就不支持了。你可以查看这两个链接了解更多信息:https://github.com/benoitc/gunicorn/issues/705 和 https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/gunicorn/
针对你的具体问题,不要去调整 $PYTHONPATH
,而是尝试把 'python'
这个键设置为你虚拟环境中的python二进制文件。这样系统应该能自动找到模块的位置。
以下是Django 1.7的完整配置:
CONFIG = {
# Default mode is WSGI
'working_dir': '/path/to/my/django/project/',
'python': '/path/to/virtualenv/bin/python',
'user': 'user',
'group': 'group',
'args': (
'--bind=127.0.0.1:8090',
'--workers=3',
# '--worker-class=egg:gunicorn#sync',
#'--timeout=30',
#'--preload',
'myproject.wsgi'
),
}