簡體   English   中英

Streamlit + Spacy 導致“AttributeError: 'PathDistribution' object 沒有屬性 '_normalized_name'”

[英]Streamlit + Spacy causing "AttributeError: 'PathDistribution' object has no attribute '_normalized_name'"

注意:這不是一個重復的問題,因為我已經完成了這個答案並進行了必要的 package 降級,但它仍然導致相同的錯誤。 詳情如下。

# 系統詳細信息

  • MacBook Air(M1,2020 年)
  • MacOS 蒙特雷 12.3
  • Python 3.10.8(Miniconda環境)
  • 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/
  • 下載此示例pdf並上傳到應用程序作為示例

這會產生一個正常運行的應用程序 -

在此處輸入圖像描述

# 我面臨的問題

現在,當我使用import spacyspacy添加到 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 代碼並在特定環境中的筆記本中運行它,這沒有任何問題。
  2. 接下來,在研究了 SO( 這個答案)和 github 問題之后,我發現importlib.metadata可能是潛在的罪魁禍首,因此我使用以下代碼將其降級,但它沒有解決任何問題。
pip uninstall importlib-metadata
pip install importlib-metadata==3.4.0
  1. 我刪除了整個環境,並按照我第一次使用的相同步驟從頭開始重新設置整個環境(以防萬一我在設置過程中犯了一些錯誤)。 但還是一樣的錯誤。

  2. 我剩下的最后一個選擇是將 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 ,您可以通過以下示例看到此錯誤(不需要spacystreamlit ):

import importlib_metadata
import importlib.metadata
importlib.metadata.entry_points()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM