[英]AttributeError: 'NoneType' object has no attribute 'name' with streamlit
[英]Streamlit + Spacy causing "AttributeError: 'PathDistribution' object has no attribute '_normalized_name'"
注意:這不是一個重復的問題,因為我已經完成了這個答案並進行了必要的 package 降級,但它仍然導致相同的錯誤。 詳情如下。
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
應用基本上包含一個上傳按鈕、提交按鈕(調用預處理和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/
這會產生一個正常運行的應用程序 -
現在,當我使用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)
importlib.metadata
可能是潛在的罪魁禍首,因此我使用以下代碼將其降級,但它沒有解決任何問題。pip uninstall importlib-metadata
pip install importlib-metadata==3.4.0
我刪除了整個環境,並按照我第一次使用的相同步驟從頭開始重新設置整個環境(以防萬一我在設置過程中犯了一些錯誤)。 但還是一樣的錯誤。
我剩下的最后一個選擇是將 spacy 處理容器化為 API,然后使用requests
通過 streamlit 應用程序調用它
如果需要,我很樂意分享requirements.txt
,但我必須弄清楚如何通過我的辦公室電腦將它上傳到某個地方。 如果需要,請告訴我,我會找到辦法。
將不勝感激解決此問題的任何幫助!
將importlib-metadata
升級到importlib-metadata>=4.3.0
以避免此特定錯誤。
內置的importlib.metadata
和附加的importlib_metadata
package 之間可能存在復雜的交互,您需要更新版本的importlib-metadata
才能獲得與此相關的一些更新/修復。
使用 python 3.10 和importlib-metadata==3.4.0
,您可以通過以下示例看到此錯誤(不需要spacy
和streamlit
):
import importlib_metadata
import importlib.metadata
importlib.metadata.entry_points()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.