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