【问题标题】:ImportError: No module named rest_framework on running collectstaticImportError:运行 collectstatic 时没有名为 rest_framework 的模块
【发布时间】:2020-06-05 04:38:16
【问题描述】:

我发现了许多具有相同错误的问题,但没有一个能够解决我的问题的实际原因,所以我发布了这个。我在我的(数字海洋)Linux 生产服务器中遇到了这个问题。

我在 virtualenv 中有 python 3.5.2,在机器中有 python2.7.12。 我已经使用命令pip install djangorestframework 在 vi​​rtualenv 中安装了 djangorestframework 但是没有安装在真机上(2.7上)

venv 中的 python3 工作正常,导入 rest_framework 正常:

(venv) myname@server:/www/site$ python
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import rest_framework
>>> exit()

机器中的python2 正在工作并且没有导入rest_framework,因为它没有安装。

myname@server:/www/site$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import rest_framework
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named rest_framework
>>> exit()

在 virtualenv 中运行 collectstatic 命令时出现以下错误。它似乎是在 python2.7 中寻找包,而不是在 virtualenv 中。

(venv) myname@server:/www/site$ sudo python manage.py collectstatic
Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 341, in execute
    django.setup()
  File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/usr/local/lib/python2.7/dist-packages/django/apps/config.py", line 90, in create
    module = import_module(entry)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named rest_framework

我的问题是,包是否也必须存在于 venv 之外的服务器机器中? 如果是这样,为什么?我应该在py2.7的服务器上安装rest_framework吗?如果我这样做,它可能会破坏一些东西吗?

【问题讨论】:

  • 你的settings.py中有DEBUG=True吗?
  • 是的,设置为true。
  • 你可能错误地在venv之外运行???
  • 我在运行 collectstatic 命令之前激活了 venv。它的节目在这里激活-(venv) myname@server:/www/site$ sudo python manage.py collectstatic
  • 因为你用 python3 创建了 venv

标签: django python-3.x django-rest-framework pip


【解决方案1】:

(venv) myname@server:/www/site$ sudo python manage.py collectstatic

问题在于在此处使用sudo。它丢弃环境以使用目标帐户的环境,因此丢弃您的虚拟环境。 如果你想保留它,你应该使用-E 标志来保护环境:

(venv) myname@server:/www/site$ sudo -E python manage.py collectstatic

你也可以直接调用虚拟环境的python,这样你就不用事先设置视觉环境了:

 (venv) myname@server:/www/site$ which python
 <path-to-python>
 (venv) myname@server:/www/site$ sudo <path-to-python> manage.py collectstatic

【讨论】:

  • 谢谢!我使用了第二种解决方案,它解决了这个问题。
猜你喜欢
  • 2018-05-25
  • 2020-10-10
  • 2013-12-16
  • 2014-11-28
  • 2016-07-10
  • 2017-01-29
  • 1970-01-01
  • 2022-01-23
  • 2020-05-05
相关资源
最近更新 更多