在EC2上的Virtualenv中运行Django - ImportError:没有名为django.core.management的模块

时间:2013-10-11 20:20:59

标签: django amazon-ec2 virtualenv pip

我在git repo中在本地开发了一个django应用程序。我为该项目启动了一个EC2实例,并设置了一个virtualenv(我相信是)正确的包/依赖项。然后我继续克隆我的repo到virtualenv。现在,由于我收到以下错误,我遇到了困难:

我尝试使用python manage.py runserver example.com/8080进行测试。我肯定会使用source bin/activate激活virtualenv,就像我在当地的virtualenv中所做的那样。当我致电... runserver时,我收到以下错误:

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

以下是sudo pip freeze产生的内容:

Warning: cannot find svn location for distribute==0.6.24dev-r0
Cheetah==2.4.4
Django==1.5.2
Fabric==1.8.0
GnuPGInterface==0.3.2
Landscape-Client==12.05
M2Crypto==0.21.1
PAM==0.4.2
PyYAML==3.10
South==0.8.2
Twisted-Core==11.1.0
Twisted-Names==11.1.0
Twisted-Web==11.1.0
apt-xapian-index==0.44
argparse==1.2.1
boto==2.2.2
chardet==2.0.1
cloud-init==0.6.3
command-not-found==0.2.44
configobj==4.7.2
## FIXME: could not find svn URL in dependency_links for this package:
distribute==0.6.24dev-r0
django-s3-folder-storage==0.1
django-storages==1.1.8
django-tastypie==0.10.0
ecdsa==0.9
euca2ools==2.0.0
gunicorn==18.0
httplib2==0.7.2
keyring==0.9.2
language-selector==0.1
launchpadlib==1.9.12
lazr.restfulclient==0.12.0
lazr.uri==1.0.3
medusa==0.5.4
meld3==0.6.5
oauth==1.0.1
paramiko==1.12.0
psycopg2==2.5.1
pyOpenSSL==0.12
pycrypto==2.4.1
pycurl==7.19.0
pyserial==2.5
python-apt==0.8.3ubuntu7.1
python-dateutil==2.1
python-debian==0.1.21ubuntu1
simplejson==2.3.2
six==1.4.1
supervisor==3.0a8
ufw==0.31.1-1
unattended-upgrades==0.1
virtualenv==1.10.1
wadllib==1.3.0
wsgiref==0.1.2
zope.interface==3.6.1

...这是我的./manage.py文件:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

有关如何修复此错误的任何想法?我试图将#!/usr/bin/env python更改为#!/var/www/paletto-env/bin python,尝试将其指向我的实际python路径,但它没有任何明显的变化,所以我将其更改回来。

感谢您的帮助。

5 个答案:

答案 0 :(得分:3)

看起来你的环境找不到Django,即使它显然在你的pip冻结中。

尝试从虚拟环境打开Python(而不是Django)shell并输入:

import django
django.VERSION

如果遇到同样的错误,Django安装可能存在问题。您的虚拟环境可能无法找到它。您可以尝试修改路径设置,或者只是重新安装Django。

如果您可以成功导入Django,或者您尝试重新安装但它不起作用,则可能存在权限问题。确保负责运行服务器的用户可以访问virtualenv中存储python库的任何地方。

答案 1 :(得分:3)

我和你有完全相同的问题,这就是我解决它的方法(免责声明:我不确定这是否是绝对正确的方法,但它对我有效,一切似乎都正确)。

简答:

尝试使用pip install (package)代替sudo pip install (package)

长答案:

我给Django完整安装文档(See here)快速阅读并且遇到了一点,基本上说你在virtualenv中使用pip时不需要超级用户权限。我只是假设两者都没问题,但我现在意识到情况可能并非如此。

我怀疑是因为我输入了sudo pip install django它在我的virtualenv项目中将它安装在我当地垃圾箱上方的某处。我怀疑这是因为当我输入python manage.py runserver时出现错误;但是,当我输入sudo python manage.py runserver时,一切正常。

此外,键入sudo pip freeze会显示我的大型库,而pip freeze会显示我的本地库以显示我的virtualenv。

我不想在所有事情之前键入sudo (do stuff)我想要一个漂亮,干净和正确的virtualenv所以我只是重新安装了django但是我的本地虚拟env pip install django现在django在正确的virtualenv库,pip freeze返回正确的内容,python manage.py runserver正常运行!

答案 2 :(得分:1)

默认情况下,

django-admin.py startproject会在manage.py中使用#!/usr/bin/env python创建一个shebang。

如果这不是你的python可执行文件的路径,或者你使用python3,只需编辑manage.py以反映这一点。

答案 3 :(得分:0)

激活您的virtualenv 后重新安装所有python软件包。

答案 4 :(得分:0)

也许Django丢失了一些pip插件,所以我们可以用Tarball安装Django:

  1. 转发https://www.djangoproject.com/download/1.6.5/tarball/
  2. 下载Django - * .tar.gz
  3. 安装它。

      

    $ tar zxvf Django-1.6.5.tar.gz

         

    $ cd Django-1.6.5 /

         

    $ python setup.py install

  4. 更多......(https://stackoverflow.com/a/24323774/686105