Running Django in Virtualenv on EC2 — ImportError:

2019-05-05 05:38发布

I developed a django application locally, in a git repo. I launched an EC2 instance for the project and I set up a virtualenv with (what I believe to be) the correct packages/dependencies. I then proceeded to clone my repo into the virtualenv. Right now, I'm having difficulty as I'm receiving the following errors:

I attempted to use python manage.py runserver example.com/8080 to test. I was sure to activate the virtualenv using source bin/activate, just like I did in my local virtualenv. When I call ... runserver I get the following error:

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

Here is what sudo pip freeze produces:

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

...and this is my ./manage.py file:

#!/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)

Any thoughts on how I can fix this error? I tried to change #!/usr/bin/env python to #!/var/www/paletto-env/bin python, trying to direct it to my actual python path, but it did not lend to any apparent change, so I changed it back.

Thanks for the help.

5条回答
Deceive 欺骗
2楼-- · 2019-05-05 06:18

Maybe the Django has lost some plugin with pip, so we can install Django with Tarball:

  1. Go https://www.djangoproject.com/download/1.6.5/tarball/
  2. Download Django-*.tar.gz
  3. install it.

    $ tar zxvf Django-1.6.5.tar.gz

    $ cd Django-1.6.5/

    $ python setup.py install

more ... (https://stackoverflow.com/a/24323774/686105

查看更多
smile是对你的礼貌
3楼-- · 2019-05-05 06:25

Reinstall all python packages angain after you have activated your virtualenv.

查看更多
仙女界的扛把子
4楼-- · 2019-05-05 06:27

Looks like you're environment can't find Django, even though it's clearly in your pip freeze.

Try opening a Python (not Django) shell from your virtual environment and entering:

import django
django.VERSION

If you run into the same error, there's probably an issue with your Django install. Your virtual environment probably can't find it. You could try modifying the path settings, or just reinstall Django.

If you can successfully import Django, or if you tried reinstalling and it doesn't work, you may have a permission problem. Ensure that the user responsible for running the server has access to wherever your python libraries are stored from the virtualenv.

查看更多
姐就是有狂的资本
5楼-- · 2019-05-05 06:32

django-admin.py startproject by default creates the shebang in manage.py with #!/usr/bin/env python.

If this is not the path to your python executable, or if you use python3, just edit the manage.py to reflect this.

查看更多
乱世女痞
6楼-- · 2019-05-05 06:40

I had pretty much the exact same problem as you and this is how I solved it (Disclaimer: I'm not sure if this is the absolute correct way but it worked for me and everything seems correct).

Short Answer:

Try pip install (package) instead of sudo pip install (package)

Long Answer:

I gave the Django complete install doc (See here) a quick read through and came across a bit that basically said you dont need super user privileges when using pip in the virtualenv. I just assumed that either would be fine but I now realize that's probably not the case.

I suspect that because I entered sudo pip install django it installed it somewhere above my local bin in my virtualenv for the project. I suspect this because when I enter python manage.py runserver I get an error; however, when I enter sudo python manage.py runserver everything functions properly.

Also, typing sudo pip freeze reveals my larger library whereas pip freeze reveals my local library for my virtualenv.

I didn't want to type sudo (do stuff) before everything and I wanted a nice, clean and proper virtualenv so I just reinstalled django but to my local virtual env with pip install django and now django is in the proper virtualenv library, pip freeze returns the proper contents, and python manage.py runserver functions properly!

查看更多
登录 后发表回答