【问题标题】:django error cannot import name 'RemovedInDjango30Warning'django 错误无法导入名称“RemovedInDjango30Warning”
【发布时间】:2023-03-18 04:57:01
【问题描述】:

伙计们,我对 Django 还很陌生,我刚开始从事一个个人项目,并决定使用不当的 pycharm(我认为它与错误有关,与否)。

当我运行python manage.py runserver时,我收到下面发布的错误。我做了一些谷歌搜索,看起来它是由与 Django 版本不一致引起的。

我目前有 Django 3.0,我在全局和 venv 中都进行了检查。

我试图在 py charm 之外启动一个项目,但我遇到了同样的问题。知道我需要做什么才能再次开始使用 Django。有人遇到过这个吗?这是因为pycharm吗?如果是这样,我可以做些什么来解决这个问题?

(venv) aiden@aiden-XPS-15-9570:~/PycharmProjects/NewsAggregator$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/utils.py", line 66, in __getitem__
    return self._engines[alias]
KeyError: 'django'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/backends/django.py", line 121, in get_package_libraries
    module = import_module(entry[1])
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/aiden/.local/lib/python3.6/site-packages/django/contrib/admin/templatetags/admin_static.py", line 5, in <module>
    from django.utils.deprecation import RemovedInDjango30Warning
ImportError: cannot import name 'RemovedInDjango30Warning'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/home/aiden/.local/lib/python3.6/site-packages/django/utils/autoreload.py", line 53, in wrapper
    fn(*args, **kwargs)
  File "/home/aiden/.local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
    self.check(display_num_errors=True)
  File "/home/aiden/.local/lib/python3.6/site-packages/django/core/management/base.py", line 395, in check
    include_deployment_checks=include_deployment_checks,
  File "/home/aiden/.local/lib/python3.6/site-packages/django/core/management/base.py", line 382, in _run_checks
    return checks.run_checks(**kwargs)
  File "/home/aiden/.local/lib/python3.6/site-packages/django/core/checks/registry.py", line 72, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/home/aiden/.local/lib/python3.6/site-packages/django/contrib/admin/checks.py", line 76, in check_dependencies
    for engine in engines.all():
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/utils.py", line 90, in all
    return [self[alias] for alias in self]
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/utils.py", line 90, in <listcomp>
    return [self[alias] for alias in self]
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/utils.py", line 81, in __getitem__
    engine = engine_cls(params)
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/backends/django.py", line 25, in __init__
    options['libraries'] = self.get_templatetag_libraries(libraries)
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/backends/django.py", line 43, in get_templatetag_libraries
    libraries = get_installed_libraries()
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/backends/django.py", line 108, in get_installed_libraries
    for name in get_package_libraries(pkg):
  File "/home/aiden/.local/lib/python3.6/site-packages/django/template/backends/django.py", line 125, in get_package_libraries
    "trying to load '%s': %s" % (entry[1], e)
django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'django.contrib.admin.templatetags.admin_static': cannot import name 'RemovedInDjango30Warning'

【问题讨论】:

    标签: django python-3.x pycharm


    【解决方案1】:

    这是由此处所示的 Django 版本中的冲突引起的。

    ImportError: 无法导入名称“RemovedInDjango30Warning”

    尝试卸载 django

    sudo pip uninstall django
    

    并使用低于 3.0 的版本重新安装

    sudo pip install django==2.2
    

    编辑

    如果你想使用不同版本的 Django,你可以使用虚拟环境。

    首先从here创建一个requirements.txt示例

    您可以通过运行 pip freeze 来生成项目的需求 列出本地安装的所有软件包的命令 机器与他们的版本。

    pip freeze > requirements.txt
    

    请注意,此过程可能会导致某些不必要的包 被写入安装在您的需求文件中 本地机器,但项目不需要。您必须手动编辑 这种情况下的需求文件。

    然后创建你的虚拟环境

    第一步安装virtualenv

    pip install virtualenv
    

    第二步创建虚拟环境

    virtualenv env
    

    第 3 步激活您的环境

    env\Scripts\activate
    

    当您想停用时

    deactivate
    

    第 4 步编辑您的 requirements.txt 以获得项目所需的包。

    第 5 步安装 requirements.txt(在同一目录中)

    pip install -r requirements.txt
    

    关于使用 mod_wsgi 和 Apache 进行部署的表单信息 try here

    【讨论】:

    • 谢谢!我认为 Django 一定太低了,所以我试图弄清楚如何让它 3.0 即使它已经是,但我没有想到我需要做相反的事情并降级。
    • 我无法理解是哪种类型的冲突,我不想重新安装低版本有没有其他方法可以解决这个问题
    • 小修正:第5步应该是pip install -r requirements.txt
    • pip uninstall django 然后pip install django 为我工作。就我而言,我只想要最新版本。不过,如果需要,您可以指定特定版本。
    【解决方案2】:

    注释掉下面一行:

    from django.utils.deprecation import RemovedInDjango30Warning
    

    在以下文件中:

    python3.6/site-packages/django/contrib/admin/templatetags/admin_static.py
    python3.6/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py
    

    【讨论】:

    • 在 Python 包文件中手动编辑?这会给你带来麻烦。我学会了避免这样做。
    • @Alexandru-MihaiManolescu 如果文本文件包含的代码已损坏,则可以编辑它们。关于这个问题,注释掉就可以了,因为来自django.utils.deprecationRemovedInDjango30Warning 无论如何都没有做任何事情,请参见代码github.com/django/django/blob/stable/2.2.x/django/utils/…,这个类在分支3.0.x 中被删除:github.com/django/django/blob/stable/3.0.x/django/utils/…
    • @mestia 重新安装软件包/依赖项将覆盖您的更改,并将在未来带回旧问题。您应该只编辑您/您的团队的代码。
    • 总的来说,我同意,但在这种情况下,它是解决模块损坏的有效解决方案。一旦解决了,就可以前往上游并尝试以正确的方式进行修复。事实上,我怀疑导入 'RemovedInDjango30Warning' 永远不会被覆盖,因为最新的 django 模块中没有 in。
    • 什么是长期解决方案?这有效,但我不想在其他计算机上再次编辑这些文件。为什么它没有在 3.0 中删除?也许我不明白这个警告的目的?
    【解决方案3】:

    这似乎来自站点包中损坏的 Django 安装。删除 Django 并重新安装。

    对我来说,我正在将现有项目从 Django 2.2.6 升级到 3.1.7。似乎 2.2.6 中的某些文件仍然存在。我必须运行 pip uninstall django 两次才能恢复原状,然后运行 ​​pip install django 才能安装最新版本。

    【讨论】:

      【解决方案4】:

      这是由 django 版本引起的。你可能升级了它。

      如果您不想回到版本 2,请创建一个虚拟环境并执行 pip install django==2.2

      【讨论】:

        【解决方案5】:

        此错误取决于 python、pip 和 django 版本。此错误主要出现在 python2 上运行最新的 django 版本。

        安装python3版本

        使用类似的命令

        pip3 安装 django

        python3 manage.py 运行服务器

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题。 由于 2 版本的 python 或 django 会出现此问题。 因此,如果您通过虚拟环境(venv)运行您的项目,请检查其中的 python 版本。 通过直接进入以下:

          myproject/venv/lib/pythonx.y
          

          请确保 x.y 是您在项目中使用的那个 python 版本。 或者,如果您不是通过 venv 运行项目,请检查您的项目正在使用和运行的 python 版本。

          python --version
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-10-27
            • 1970-01-01
            • 2015-10-08
            • 1970-01-01
            • 2017-08-11
            • 2021-02-19
            • 2014-01-29
            • 2016-11-21
            相关资源
            最近更新 更多