ImportError:无法从“charset_normalizer.constant”导入名称“COMMON_SAFE_ASCII_CHARACTERS”

Len*_*a.J 24 python importerror pdfminer

Traceback (most recent call last):
  File "g:\mydrive\ \pdftotext_pdfminer.py", line 3, in <module>
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
  File "C:\Users\ \anaconda3\envs\ \lib\site-packages\pdfminer\pdfinterp.py", line 7, in <module> 
    from .cmapdb import CMap
  File "C:\Users\ \anaconda3\envs\ \lib\site-packages\pdfminer\encodingdb.py", line 7, in <module>
    from .psparser import PSLiteral
  File "C:\Users\ \anaconda3\envs\ \lib\site-packages\pdfminer\psparser.py", line 22, in <module>
    from .utils import choplist
  File "C:\Users\ \anaconda3\envs\ \lib\site-packages\pdfminer\utils.py", line 31, in <module>
    import charset_normalizer  # For str encoding detection
  File "C:\Users\ \anaconda3\envs\ \lib\site-packages\charset_normalizer\__init__.py", line 23, in <module>
    from charset_normalizer.api import from_fp, from_path, from_bytes, normalize
  File "C:\Users\ \anaconda3\envs\ \lib\site-packages\charset_normalizer\api.py", line 10, in <module>
    from charset_normalizer.md import mess_ratio
  File "charset_normalizer\md.py", line 5, in <module>
ImportError: cannot import name 'COMMON_SAFE_ASCII_CHARACTERS' from 'charset_normalizer.constant' (C:\Users\ \anaconda3\envs\ \lib\site-packages\charset_normalizer\constant.py)
Run Code Online (Sandbox Code Playgroud)

每当我使用 pdfminer 时都会发生此错误。我还安装了 pdfminer-6

直到两天前,我的代码都运行得很好。今天开始发生这种情况,当我尝试再次运行它而不对文件进行任何调整时

我假设这可能是 pdfminer 的问题,但该模块没有更新......

(我在我的 conda 环境中运行这个)

有谁知道这个错误是什么意思?以及如何解决它?

小智 53

当我遇到这个时,我使用了:

pip install chardet
Run Code Online (Sandbox Code Playgroud)


小智 21

我也遇到了同样的问题,尽管是aiohttp,而不是pdfminer。安装chardet而不是我现有的(conda)安装charset-normalizer解决了这个错误,但给我带来了其他问题。我的最终解决方案是删除chardet并安装当前版本charset-normalizer(目前是 3.1.0,而不是3.0.1)。这可以通过以下方式完成

conda install -c conda-forge charset-normalizer
Run Code Online (Sandbox Code Playgroud)


小智 9

就我而言,我有一个 conda 环境,不知何故,我通过 venv 创建以某种方式安装了字符集规范化器:2.0.4

pip 列表显示 2.04 conda 列表显示 3.01

所以我使用以下命令删除字符集版本 2.04:

pip 卸载字符集规范化器

然后按照上面的解决方案,我使用 conda 重新安装:

conda install -c conda-forge 字符集规范化器

经验法则:只要可用,也使用 conda 包 - 仅当 conda 存储库中没有可用的情况时才使用 pip。


小智 7

就我而言,在 Python 3.9 上安装 Transformer (4.29.2) 后,我遇到了同样的错误。事实证明,问题是 chardet (5.1.0) 和 charset-normalizer (3.1.0) 之间的兼容性问题。

我通过卸载它们并重新安装相同的 chardet 但使用旧版本的 charset-normalizer 解决了这个问题。

pip uninstall chardet 
pip uninstall charset-normalizer
pip install chardet 
pip install charset-normalizer==2.1.0
Run Code Online (Sandbox Code Playgroud)

我用 conda 尝试了一个新的环境,并得到了完全相同的结果!


小智 0

那里。今天(2022-11-24)尝试从我长期使用的脚本中使用 pdfplumber 包时,我遇到了同样的问题。我不知道为什么会发生此错误,但发现此链接中的解决方案之一很有帮助: How to fix AttributeError: Partially Initialized module?

简而言之,我使用命令 conda env remove --name ds (ds 是我的环境的名称)删除了整个虚拟环境。然后,我创建了一个新包,并通过 conda 或 pip 再次安装了我需要的每个包。现在工作正常。希望它也适合你。

出于好奇,我上周安装了 Tensorflow。也许它以某种方式干扰了 pdfplumber (不确定)。自上次使用 pdfminer 以来您是否安装过任何新软件包?祝你好运!