python django ImportError: cannot import name 'parse_http_list'

这两天一直在钻研python—django框架,打算利用django建立一个小型博客来入门django开发,顺便熟悉web 的开发模式,我使用的vscode进行开发的,在昨天,不知道是我做了什么,利用python虚拟环境下使用pip下载库文件总是报ImportError: cannot import name 'parse_http_list'这个错。如下。


出了问题当然是要解决问题了,然后先百度,再Google,然而,我发现,在网上parse_http_list这个东西都搜不到,这时候我已经差不多放弃了,我觉得这是一个未知的问题,就我现在的水平是解决不了的,或者这是一个独属于我的错误,但是心里还是有一股执念,有问题必须要解决,否则当什么程序员啊?但是这种毫无头绪的错误却是最让人头痛,搜索又搜不到,错误信息又少,不过这时我灵机一动,错误提示不是提示不能加载这个“parse_http_list”吗?好我就找到这个库文件的位置,看看为什么加载不来,然后我顺着提示的路径d:\study\python\pythonprj\demo_myblog\lib\site-packages\pip\_vendor\requests\utils.py", line 23, in找到了这个文件,是这个样子的,


于是我收顺着当前路径compat这个东东,找到compat.py 这个东东,利用vscode 打开一看,what,怎么是空的,空的怎么引用的???于是我去找我创建的另一个django项目的同一个文件,果然发现,里面还有老多的代码了,


然后我将compat.py 的内容复制到我的项目的compat.py的文件中,然后。。。。。 问题解决了,,哈哈哈

此时,我不得不惊呼,开源万岁!!!!

不过现在问题又来了,我当时怎样的手残将compat.py文件里的代码搞掉的呢???

mc.lcx@raspberrypi:~/Desktop/pip-18.1 $ pip3 --version Traceback (most recent call last): File "/usr/local/bin/pip3", line 33, in <module> sys.exit(load_entry_point('pip==18.1', 'console_scripts', 'pip3')()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/bin/pip3", line 25, in importlib_load_entry_point return next(matches).load() ^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/importlib/metadata/__init__.py", line 202, in load module = import_module(match.group('module')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1206, in _gcd_import File "<frozen importlib._bootstrap>", line 1178, in _find_and_load File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 690, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 940, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/usr/local/lib/python3.11/dist-packages/pip/_internal/__init__.py", line 40, in <module> from pip._internal.cli.autocompletion import autocomplete File "/usr/local/lib/python3.11/dist-packages/pip/_internal/cli/autocompletion.py", line 8, in <module> from pip._internal.cli.main_parser import create_main_parser File "/usr/local/lib/python3.11/dist-packages/pip/_internal/cli/main_parser.py", line 12, in <module> from pip._internal.commands import ( File "/usr/local/lib/python3.11/dist-packages/pip/_internal/commands/__init__.py", line 6, in <module> from pip._internal.commands.completion import CompletionCommand File "/usr/local/lib/python3.11/dist-packages/pip/_internal/commands/completion.py", line 6, in <module> from pip._internal.cli.base_command import Command File "/usr/local/lib/python3.11/dist-packages/pip/_internal/cli/base_command.py", line 23, in <module> from pip._internal.index import PackageFinder File "/usr/local/lib/python3.11/dist-packages/pip/_internal/index.py", line 14, in <module> from pip._vendor import html5lib, requests, six File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/html5lib/__init__.py", line 25, in <module> from .html5parser import HTMLParser, parse, parseFragment File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/html5lib/html5parser.py", line 8, in <module> from . import _tokenizer File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/html5lib/_tokenizer.py", line 16, in <module> from ._trie import Trie File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/html5lib/_trie/__init__.py", line 3, in <module> from .py import Trie as PyTrie File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/html5lib/_trie/py.py", line 6, in <module> from ._base import Trie as ABCTrie File "/usr/local/lib/python3.11/dist-packages/pip/_vendor/html5lib/_trie/_base.py", line 3, in <module> from collections import Mapping ImportError: cannot import name 'Mapping' from 'collections' (/usr/lib/python3.11/collections/__init__.py) 出现该错误的原因及解决方法
06-23
在使用 Django 时,如果遇到 `ImportError: cannot import name 'smart_text' from 'django.utils.encoding'` 错误,通常是因为 Django 的版本升级导致某些旧模块或函数被移除或替换。`smart_text` 在早期版本中存在,但在较新的 Django 版本中已被弃用,并由 `smart_str` 或 `force_str` 取代[^3]。 ### 解决方法 1. **检查 Django 版本** 首先确认当前使用的 Django 版本。可以通过以下命令查看: ```bash python -m django --version ``` 2. **替换 `smart_text` 为 `smart_str` 或 `force_str`** 在 Django 3.0 及更高版本中,`smart_text` 已被移除,建议使用 `smart_str` 或 `force_str` 替代。可以将代码中的导入语句进行如下修改: ```python # 旧代码 from django.utils.encoding import smart_text # 新代码 from django.utils.encoding import smart_str as smart_text ``` 或者直接使用 `force_str`,它在功能上与 `smart_text` 类似: ```python from django.utils.encoding import force_str as smart_text ``` 3. **更新第三方库** 如果错误来源于某个第三方库,而不是项目本身的代码,建议更新该库到最新版本,以确保与当前 Django 版本兼容: ```bash pip install --upgrade package_name ``` 4. **降级 Django 版本** 如果无法修改代码或更新第三方库,可以考虑降级 Django 到仍支持 `smart_text` 的版本(如 Django 2.2): ```bash pip install "Django<3.0" ``` 5. **检查依赖关系** 确保项目中所有依赖包都与当前 Django 版本兼容。可以使用 `pip check` 命令检查是否存在版本冲突: ```bash pip check ``` ### 示例代码 以下是一个使用 `force_str` 替代 `smart_text` 的示例: ```python from django.utils.encoding import force_str text = force_str('Hello World') print(text) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值