**注意:**这不是一个重复的问题,因为我已经通过了this answer,并进行了必要的软件包降级,但它仍然导致相同的错误。详细信息如下。
#系统详细信息
- 苹果笔记本电脑(M1)
- MacOS Monterey 12.3
- Python 3.10.8(迷你图标环境)
pip freeze
中的相关库版本
importlib-metadata==3.4.0
PyMuPDF==1.21.1
spacy==3.4.4
spacy-alignments==0.9.0
spacy-legacy==3.0.11
spacy-loggers==1.0.4
spacy-transformers==1.2.0
streamlit==1.17.0
flair==0.11.3
catalogue==2.0.8
#设置
- 我正在尝试使用
Spacy
对上传到Streamlit
应用程序的pdf文档进行一些文本处理。 Streamlit
应用程序基本上包含一个上传按钮、提交按钮(调用预处理和spacy函数)和一个text_area
来显示处理后的文本。
下面是上传pdf文档并提取其文本的工作代码-
import streamlit as st
import fitz
def load_file(file):
doc = fitz.open(stream=uploaded_file.read(), filetype="pdf")
text = []
with doc:
for page in doc:
text.append(page.get_text())
text = "\n".join(text)
return text
#####################################################################
st.title("Test app")
col1, col2 = st.columns([1,1], gap='small')
with col1:
with st.expander("Description -", expanded=True):
st.write("This is the description of the app.")
with col2:
with st.form(key="my_form"):
uploaded_file = st.file_uploader("Upload",type='pdf', accept_multiple_files=False, label_visibility="collapsed")
submit_button = st.form_submit_button(label="Process")
#####################################################################
col1, col2 = st.columns([1,3], gap='small')
with col1:
st.header("Metrics")
with col2:
st.header("Text")
if uploaded_file is not None:
text = load_file(uploaded_file)
st.text_area(text)
#重现基本代码
- 安装必要的库
- 保存上述代码到一个
test.py
文件 - 从终端导航到文件夹并运行
streamlit run test.py
- 在浏览器中导航到
http://localhost:8501/
- 下载this sample pdf并将其上传到应用程序作为示例
结果是一个正常运行的应用程序-
#我面临的问题
现在,当我使用import spacy
将spacy
添加到python文件中并重新运行streamlit应用程序时,问题出现了-
AttributeError: 'PathDistribution' object has no attribute '_normalized_name'
Traceback:
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 565, in _run_script
exec(code, module.__dict__)
File "/Users/akshay_sehgal/Library/CloudStorage/________/Documents/Code/Demo UI/Streamlit/keyphrase_extraction_template/test.py", line 3, in <module>
import spacy
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/site-packages/spacy/__init__.py", line 6, in <module>
from .errors import setup_default_warnings
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/site-packages/spacy/errors.py", line 2, in <module>
from .compat import Literal
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/site-packages/spacy/compat.py", line 3, in <module>
from thinc.util import copy_array
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/site-packages/thinc/__init__.py", line 5, in <module>
from .config import registry
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/site-packages/thinc/config.py", line 1, in <module>
import catalogue
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/site-packages/catalogue/__init__.py", line 20, in <module>
AVAILABLE_ENTRY_POINTS = importlib_metadata.entry_points() # type: ignore
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/importlib/metadata/__init__.py", line 1009, in entry_points
return SelectableGroups.load(eps).select(**params)
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/importlib/metadata/__init__.py", line 459, in load
ordered = sorted(eps, key=by_group)
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/importlib/metadata/__init__.py", line 1006, in <genexpr>
eps = itertools.chain.from_iterable(
File "/Users/akshay_sehgal/miniconda3/envs/demo_ui/lib/python3.10/importlib/metadata/_itertools.py", line 16, in unique_everseen
k = key(element)
#我尝试了什么?
1.我尝试的第一件事是隔离spacy代码,并在特定环境下的笔记本中运行它,它工作起来没有任何问题。
1.接下来,在研究了SO(this answer)和github问题之后,我发现importlib.metadata
可能是潜在的罪魁祸首,因此我使用以下代码对此进行了降级,但它没有修复任何问题。
pip uninstall importlib-metadata
pip install importlib-metadata==3.4.0
1.我删除了整个环境,并从头开始重新设置整个环境,遵循我第一次使用的相同步骤(以防我在设置过程中犯了一些错误),但仍然是同样的错误。
1.最后一个选项是将空间处理容器化为API,然后使用requests
通过streamlit应用程序调用它
如果需要的话,我很乐意分享requirements.txt
,但我必须想出如何通过我的办公室电脑将其上传到某个地方。如果需要,请让我知道,我会找到方法的。
将感谢任何帮助解决这个问题!
1条答案
按热度按时间9udxz4iz1#
将
importlib-metadata
升级到importlib-metadata>=4.3.0
以避免此特定错误。内置的
importlib.metadata
和附加的importlib_metadata
包之间可能存在复杂的交互,您需要更新版本的importlib-metadata
来获得与此相关的一些更新/修复。在python 3.10和
importlib-metadata==3.4.0
中,您可以在以下示例中看到此错误(spacy
和streamlit
不是必需的):