错误:在为Django设置virtualenv后无法导入设置'mysite.settings'

时间:2011-12-29 20:44:32

标签: django fedora

我在Fedora上这样做

问题:

(sandbox)[root@localhost mysite]# django-admin.py runserver
Error: Could not import settings 'mysite.settings' (Is it on sys.path?): No module named mysite.settings

设置virtualenv

mkdir pythonenv           # that's the /home/yeukhon/pythonenv/*.*
cd pythonenv
virtualenv --no-site-packages --distribute sandbox

安装Django

pip install -E sandbox django

#    changing mode of /home/yeukhon/pythonenv/sandbox/bin/django-admin.py to 755
#    Successfully installed django

在/ home / yeukhon / pythonenv / sandbox

bin   include  lib  mysite

在lib下

You have /lib/python2.7/site-packages/django/*.*

创建项目很好

(sandbox)[root@localhost sandbox]# django-admin.py startproject mysite
# the path is now /home/yeukhon/pythonenv/sandbox/mysite/*.*

无法运行服务器

django-admin.py runserver
Error: Could not import settings 'mysite.settings' (Is it on sys.path?): No module named mysite.settings

沙箱下的Python Shell (遵循本指南:How to troubleshoot - ImportError: Could not import settings 'mysite.settings' when deploying django?

(sandbox)[root@localhost mysite]# python
Python 2.7.2 (default, Oct 27 2011, 01:36:46) 
[GCC 4.6.1 20111003 (Red Hat 4.6.1-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> import os
>>> os.environ['DJANGO_SETTINGS_MODULE'] 
'mysite.settings'

>>> os.path.exists('/home')
True
>>> os.path.exists('/home/yeukhon/pythonenv/sandbox/mysite')
True
>>> os.path.exists('/home/yeukhon/pythonenv/sandbox/mysite/settings.py')
True
>>> from django.core.management import setup_environ
>>> import mysite.settings
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mysite.settings

>>> setup_environ(mysite.settings)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'mysite' is not defined


>>> print sys.path
['', 
/home/yeukhon/pythonenv/sandbox/lib/python2.7/site-packages/distribute-0.6.14-py2.7.egg', 
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/site-packages/pip-0.8.1-py2.7.egg', 
'/home/yeukhon/pythonenv/sandbox/lib/python27.zip',
'/home/yeukhon/pythonenv/sandbox/lib/python2.7',
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/plat-linux2',
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/lib-tk',
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/lib-old',
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/site-packages'

我需要做些什么来纠正这个问题?谢谢你的时间。


修改

感谢您的回复。

我尝试了以下内容:

(sandbox)[root@localhost mysite]# export PYTHONPATH="/home/yeukhon/pythonenv/sandbox/"
(sandbox)[root@localhost mysite]# export PYTHONPATH="/home/yeukhon/pythonenv/"
(sandbox)[root@localhost mysite]# deactivate
[root@localhost mysite]# source ../bin/activate
(sandbox)[root@localhost mysite]# django-admin.py runserver
Error: Could not import settings 'mysite.settings' (Is it on sys.path?): No module named mysite.settings

>>> sys.path
['',.... '/home/yeukhon/pythonenv'.....]

它现在在python路径上。但我仍然无法运行服务器。

集中式Django项目

是。这是一个很好的建议。 所以我想我需要做的就是“创建一个名为mydjango的目录,然后在mydjango中创建项目”。但是需要更改/添加哪些命令?我愿意学习好的做法。

非常感谢。


解决方案(添加到环境变量)

PYTHONPATH=$PYTHONPATH:path-to-your-directory

# PYTHONPATH=$PYTHONPATH:/home/yeukhon/pythonenv/sandbox/

2 个答案:

答案 0 :(得分:5)

最后一行告诉你所有你需要知道的事情。要导入mysite.settingsmysite的父目录必须在您的PYTHONPATH上。目前还没有。

FWIW,将项目实际存储在 virtualenv目录中并不常见。通常,您将所有项目放在PYTHONPATH上的目录中。然后,只需加载你需要的所有功能,以及所有功能。事实上,virtualenv最好的部分是它们可以互换;也就是说,您可以轻松地在多个不同的virtualenv环境中运行相同的项目(例如在不改变您的正常virtualenv的情况下测试Django的新版本),但同样,您希望将项目放在一个集中的位置,而不是在特定的virtualenv目录中

答案 1 :(得分:3)

不要将django-admin.py用于runserver,或者确实用于startproject以外的任何其他内容。请改用manage.py runserver。这为你设置了所有相关的路径,然后就可以了。