如何将Django设置配置为不需要sudo?

时间:2016-11-19 21:08:28

标签: python django pip virtualenv 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的方式,但无论如何要解决此问题而不重新安装所有内容?

2 个答案:

答案 0 :(得分:0)

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

import sys
sys.executable
sys.path

sys.executable是Python可执行文件的完整路径名。它应该是你的virtualenv内的东西。 sys.path是Python在尝试import时搜索模块的目录列表。这应该包括你的virtualenv。

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

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

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

答案 1 :(得分:0)

这可能由于几个不同的原因(从最基本到更复杂)发生:

  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用户 - 在virtualenv上运行python3,但python2.7默认在comp上。通过停用第一个virtualenv修复,手动删除bin || venv,启动新的virtualenv设置为使用python2.7。使用virtualenv -p /usr/bin/python2.7 env
  4. 类似 - 运行不同版本的服务器。有时您可以使用别名(ala alias python=python2.7)进行修复,但请确保仅在用于项目的实例上使用,而不是在本地comp上使用。本地comp不会工作,因为sudo是默认运行的默认python版本。
  5. manage.py默认路径不正确。这取决于您的设置以及存储python依赖项的位置。如果这是您的问题,请用#!/usr/bin/env python替换shebang。小心re:python版本在这里,所以如果OS默认与使用不同,只需在python末尾添加数字(例如:python3)。
  6. 关注@antonis回答,找出$PYTHONPATH中与sudo PATH不匹配的位置。管道/更新配置文件以修复。