Debian 7 + django + gunicorn + virtualenv:site-packages egg-link不在pythonpath中

时间:2014-06-26 07:59:44

标签: python django gunicorn egg

背景:

  • Debian 7
  • gunicorn(从debian包安装以便使用/etc/gunicorn.d配置)
  • 通过virtualenv中的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 conf中为PYTHONPATH手动添加这些包的路径。

'PYTHONPATH': '/path/to/my/django/project/:/path/to/virtualenv/src/bidule-master/:/path/to/virtualenv/lib/python2.7/site-packages/',

我的问题是有一种方法可以不必在pythonpath中手动放入每个github包吗?

由于

1 个答案:

答案 0 :(得分:3)

首先,Gunicorn的django特定模式已被弃用,并且不再适用于Django 1.7。请参阅https://github.com/benoitc/gunicorn/issues/705https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/gunicorn/

针对您的具体问题,请尝试在您的virtualenv中将$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'
    ),
}