无法在 virtualenv 中导入 django,但在停用时可以工作

Posted

技术标签:

【中文标题】无法在 virtualenv 中导入 django,但在停用时可以工作【英文标题】:couldn't import django in virtualenv but works when deactivated 【发布时间】:2017-07-13 07:58:38 【问题描述】:

我正在尝试使用 Ubuntu 16.04 在 Amazon AWS 上部署我的 Django 项目。我正在运行 python 版本 2.7.12 和 Django 1.10.5。我创建了名为 venv 的 virtualenv,然后激活了它。 当我尝试运行 python manage.py runserver 时出现此错误。

Traceback(最近一次调用最后一次): 文件“manage.py”,第 17 行,在 “无法导入 Django。你确定它已经安装了吗?” ImportError:无法导入 Django。您确定它已安装并在您的 PYTHONPATH 环境变量中可用吗?您忘记激活虚拟环境了吗?

然后我意识到 Django 可能不在我的 python 路径中。所以我加了

导出 PYTHONPATH="/usr/local/lib/python2.7/dist-packages/django"

进入我的 venv/bin/activate 脚本。现在激活 virtualenv 我可以进入 python 并输入

导入系统 系统路径 ['', '/usr/local/lib/python2.7/dist-packages/django', '/home/ubuntu/TravelBuddy/venv/lib/python2.7', '/home/ubuntu/TravelBuddy/venv/ lib/python2.7/plat-x86_64-linux-gnu','/home/ubuntu/TravelBuddy/venv/lib/python2.7/lib-tk','/home/ubuntu/TravelBuddy/venv/lib/python2. 7/lib-old'、'/home/ubuntu/TravelBuddy/venv/lib/python2.7/lib-dynload'、'/usr/lib/python2.7'、'/usr/lib/python2.7/plat -x86_64-linux-gnu','/usr/lib/python2.7/lib-tk','/home/ubuntu/TravelBuddy/venv/local/lib/python2.7/site-packages','/home/ ubuntu/TravelBuddy/venv/lib/python2.7/site-packages']

正如你现在看到的,django 确实在我的 python 路径中。我认为这会解决问题,但它没有:它仍然说无法导入 Django。现在我很困惑,因为当我停用我的 virtualenv 并导入 Django 时,它确实可以工作。

这是当我停用我的 virtualenv 并执行 sys.path 时打印出来的内容

['', '/usr/local/lib/python2.7/dist-packages/django', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64 -linux-gnu','/usr/lib/python2.7/lib-tk','/usr/lib/python2.7/lib-old','/usr/lib/python2.7/lib-dynload' , '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

【问题讨论】:

您是否在虚拟环境中安装了 Django,而不仅仅是将其添加到路径中? @Neelik 是的,我在虚拟环境中安装了 Django 在我的服务器上的虚拟环境中,所有的包都在 site-packages 目录中。我注意到当激活 venv 时,您的示例中 django 的路径被列为“/usr/local/lib/python2.7/dist-packages/django”。在列表的后面还有“/home/ubuntu/TravelBuddy/venv/lib/python2.7/site-packages”。如果将 Django 移动到 site-packages 目录并尝试导入它会发生什么? 在 virtualenv 中运行 pip freeze 并发布输出。 【参考方案1】:

好的,我发现了问题所在。事实证明,当我启动我的 virtualenv 时,我使用了 sudo 命令,但是当我 pip install 我的包时,我没有使用 sudo 命令,这导致了权限问题或在安装包时出现了某种问题。所以它使 django 没有出现在路径上。启动虚拟环境时,切勿使用 sudo 命令...

【讨论】:

【参考方案2】:

1- 安装 python3 brew install python3 2-安装django pip3 install django

【讨论】:

以上是关于无法在 virtualenv 中导入 django,但在停用时可以工作的主要内容,如果未能解决你的问题,请参考以下文章

在 django 中导入设置时出现奇怪的错误

无法在脚本中导入 django.apps

无法在虚拟环境中导入本地模块

尝试在 Django 应用程序的 js 文件中导入 vue.js 时出现“未捕获的语法错误:无法在模块外使用 import 语句”

为啥我不能在 Django 项目中导入模块?

在 Django 中导入设置