我最近已习惯在我的django项目中执行以下操作,以便我可以在各种操作系统(即非Linux)上测试bowser兼容性:
$ sudo ./manage.py runserver 0.0.0.0:80
这允许我通过网络上的任何机器访问项目。
但是,我只是设置了一台新机器,此命令发出以下错误:
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
我知道django在查找模块时遇到了问题,我不明白的是那个简单的旧模块:
$ sudo ./manage.py runserver
运行良好。我在这里所做的一切都在改变港口吗?当然,它在过去运作良好。
N.B。
1.我正在使用Django 1.4
2.我在virtualenv和系统中尝试过,我得到了相同的结果
3.我没有在系统范围内安装django(仅限于virtualenvs)
非常感谢任何帮助。
答案 0 :(得分:22)
我猜sudo命令将在超级用户上下文中运行该进程,而超级用户上下文缺少virtualenv设置。
您可以尝试显式调用virtualenv中的python二进制文件,例如:
sudo $(which python) manage.py runserver 0.0.0.0:80
创建一个shell脚本来设置virtualenv并调用manage.py runserver
,然后改为sudo这个脚本。
#!/bin/bash
source /home/darwin/.virtualenvs/foo/bin/activate
cd /path/to/project/foo
python manage.py runserver 0.0.0.0:80
将/home/darwin/.virtualenvs/foo
替换为实际virtualenv的根目录,将/path/to/project/foo
替换为项目的根目录。
答案 1 :(得分:7)
这是另一个解决方案,而不是创建shell脚本,只需在命令中指定要使用的python可执行文件:
假设你的virtualenv容器被称为.virtualenvs
并且其中有一个名为myproject
的env,这是你必须写的命令:
$ sudo ~/.virtualenvs/myproject/bin/python manage.py runserver 0.0.0.0:80
答案 2 :(得分:0)
基于@Paulo_Scardine 的回答:
如果要保留 virtualenv 环境变量,可以在 -E
命令中添加 sudo
选项:
sudo -E $(which python) manage.py runserver 0.0.0.0:80
答案 3 :(得分:0)
这是另一种解决方案,无需创建shell脚本,只需在命令中指定要使用的python可执行文件即可:
假设你的 virtualenv 容器在你的项目主目录中被称为 venv,这是你必须编写的命令:
sudo /home/mahome/PycharmProjects/sampleproject/venv/bin/python manage.py runserver 127.0.1.1:80
答案 4 :(得分:-1)
运行
manage.py runserver 0.0.0.0:8000
即。在不同的端口运行服务器而不是默认端口80
访问网址时使用端口号