2014-10-12 41 views
1

這裏是我的buildout.cfg:擴建安裝Django的,但不能導入

[buildout] 
parts = 
    django 

[versions] 
djangorecipe = 1.5 
django = 1.7 

[django] 
recipe = djangorecipe 
project = timetable 
eggs = 

這是我在一個新的環境中設置項目常規:

virtualenv . 
source bin/activate 
easy_install -U setuptools 
python bootstrap.py 
bin/buildout -v 
python manage.py migrate 

當我運行斌/擴建,它說django已安裝,並且django二進制文件位於bin文件夾中。但是當我運行manage.py時,它無法導入django:

(timetable)[email protected]:~/timetable$ python manage.py migrate 
Traceback (most recent call last): 
    File "manage.py", line 8, in <module> 
    from django.core.management import execute_from_command_line 
ImportError: No module named django.core.management 

但是,它在我使用pip安裝django時起作用。爲什麼不在我的virualenv中安裝django?我怎樣才能解決這個問題?

回答

0

構建不會在virtualenv中安裝任何東西。 Buildout收集python軟件包並將程序添加到bin/目錄中,該目錄將正確的python軟件包添加到它們的sys.path中。

所以:

  • 的virtualenv/PIP安裝一切到virtualenv中。您必須激活virtualenv,以便它可以修改您的PYTHONPATH環境變量(和變量PATH)。通過這種方式,可以使用virtualenv的bin/目錄中的python以及lib/目錄中的python包。

  • 構建爲bin/中的腳本添加了必要的「pythonpath」更改,直接修改sys.path設置而不是通過環境變量。

一件事你需要知道的是,你應該運行bin/django而不是python manage.py。效果是一樣的,只有bin/django已經有權利sys.path設置。

舉一個例子,看看bin/django腳本的內容。它應該看起來像這樣:

#!/usr/bin/python 

import sys 
sys.path[0:0] = [ 
    '/vagrant', 
    '/vagrant/eggs/djangorecipe-1.10-py2.7.egg', 
    '/vagrant/eggs/Django-1.6.6-py2.7.egg', 
    '/vagrant/eggs/zc.recipe.egg-2.0.1-py2.7.egg', 
    '/vagrant/eggs/zc.buildout-2.2.1-py2.7.egg', 
    '/vagrant/eggs/South-1.0-py2.7.egg', 
    ... 
    ] 

import djangorecipe.manage 

if __name__ == '__main__': 
    sys.exit(djangorecipe.manage.main('yoursite.settings')) 
相關問題