如何将 Django 安装程序配置为不需要 sudo?

How can I configure Django setup to not need sudo?

我全局安装了 pipvirtualenvdjango。使用 py3,默认设置使用 ~./bash_profile 中的别名行 - 所以 py2 与 Mac 打包仍然存在。

在新 virtualenv 中已激活,但是当我尝试使用 django 执行任何操作时出现以下错误:

$ python manage.py migrate
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'

如果我 运行 和 sudo(即 sudo python manage.py migrate)命令有效。

我知道问题可能出在我的安装方式 pip 上,但无论如何要解决此问题而不重新安装所有内容?

而不是python manage.py migrate,只需告诉它python。它将启动一个交互式 python 解释器。告诉它以下内容:

import sys
sys.executable
sys.path

sys.executable 是 Python 可执行文件的完整路径名。它应该在你的 virtualenv 中。 sys.path 是目录列表,每当您尝试 import 某些内容时,Python 都会在其中搜索模块。这应该包括你的 virtualenv。

现在退出 Python 并告诉它 sudo python。输入相同的指令。有什么不同?

这应该会提示您做错了什么,您应该能够进一步调试它。

您可能还会发现我的文章 virtualenv demystified 很有用。

发生这种情况的原因有多种(从最基本到更复杂):

  1. Django 未安装,无论是全局安装,还是在您的 virtualenv 中,或两者均未安装。使用 pip list 检查。大多数时候 pip install django 会修复。不要 sudo 这个,否则你将不得不 sudo 一切。另外:仔细检查 django 版本匹配 python 版本; pip install --upgrade django 获取最新版本。
  2. Virtualenv 未激活 - 使用 source your_path/venv/bin/activate
  3. Mac 用户 - 在 vi​​rtualenv 上 运行ning python3,但在 comp 上默认 python2.7。通过停用第一个 virtualenv,手动删除 bin||venv,启动新的 virtualenv 设置为使用 python2.7 来修复。使用 virtualenv -p /usr/bin/python2.7 env.
  4. 相似 - 服务器 运行宁不同的版本。有时您可以使用别名 (ala alias python=python2.7) 进行修复,但请确保仅在用于项目的实例上使用,而不是在本地组件上使用。本地 comp 将无法工作,因为无论如何默认 python 版本的 sudo 都是 运行。
  5. manage.py中默认路径不正确。这取决于您的设置以及 python 依赖项的存储位置。如果这是您的问题,请将 shebang 替换为 #!/usr/bin/env python。请注意这里的 python 版本,所以如果 OS 默认问题与使用不同,只需在 python 末尾添加数字(例如:python3)。
  6. 按照@antonis 的回答,找出 $PYTHONPATH 中与 sudo PATH 不匹配的地方。 Pipe/update 要修复的配置文件。