17

我最近习惯于在我的 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

运行良好。我在这里所做的只是改变端口,确定吗?而且,当然,它在过去工作得很好。

注意
1. 我使用的是 Django 1.4
2. 我在 virtualenv 和系统上尝试过,我得到了相同的结果。
3. 我没有在系统范围内安装 django(仅在 virtualenvs 中)

任何帮助将非常感激。

4

5 回答 5

31

我猜 sudo 命令将在超级用户上下文中运行该进程,而超级用户上下文缺少 virtualenv 设置。

您可以尝试在您的 virtualenv 中显式调用 python 二进制文件,例如:

sudo $(which python) manage.py runserver 0.0.0.0:80

制作一个 shell 脚本来设置 virtualenv 和 call 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的根目录和项目的根目录。

于 2012-09-21T00:07:19.267 回答
8

这是另一个解决方案,而不是创建 shell 脚本,只需在命令中指定要使用的 python 可执行文件:

假设您的 virtualenv 容器被调用.virtualenvs并且其中有一个 env 被调用myproject,这是您必须编写的命令:

$ sudo ~/.virtualenvs/myproject/bin/python manage.py runserver 0.0.0.0:80
于 2016-03-31T12:13:34.913 回答
1

以@Paulo_Scardine 的回答为基础:

如果要保留 virtualenv 环境变量,可以将-E选项添加到sudo命令中:

sudo -E $(which python) manage.py runserver 0.0.0.0:80
于 2021-01-25T23:31:00.720 回答
0

Here's another solution, instead of creating shell script, just specify which python executable you want to use in the command:

Assuming that your virtualenv container is called venv in your project home directory, this is command you have to write:

sudo /home/mahome/PycharmProjects/sampleproject/venv/bin/python manage.py runserver 127.0.1.1:80
于 2021-04-22T12:43:15.527 回答
-1

运行
manage.py runserver 0.0.0.0:8000
即。
在访问 url 时使用不同的端口而不是默认端口 80 运行服务器使用端口号

于 2014-08-13T09:20:49.760 回答