質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

5476閲覧

AttributeError: module 'streamlit' has no attribute 'session_state'が出る

EbiTT

総合スコア12

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/07/10 04:46

編集2021/07/10 12:10

#概要
streamlit run main.pyを実行すると、
AttributeError: module 'streamlit' has no attribute 'session_state'というエラーになる問題で困っています。

私の行った手順は以下の通りです

(1)main.pyを以下のようにした

python

1import streamlit as st 2st.set_page_config(layout="wide") 3 4import select_page as page1 5import show_page as page2 6import scraping_page as page3 7 8 9pages = { 10 "対象サイトの選択": page1.page, 11 "新着情報一覧": page2.page, 12 "更新の実行": page3.page, 13} 14 15 16 17if "news" not in st.session_state: 18 st.session_state["news"] = {} 19if "sites" not in st.session_state: 20 st.session_state["sites"] = {} 21 22st.sidebar.title('ページの一覧') 23selection = st.sidebar.radio("", list(pages.keys())) 24 25if selection == "対象サイトの選択": 26 is_scraping_list = pages[selection]() 27elif selection == "新着情報一覧": 28 pages[selection](st.session_state["news"]) 29elif selection == "更新の実行" : 30 news_dict = pages[selection]() 31 st.session_state["news"] = news_dict

(2)streamlit run main.pyを実行した

すると、以下のような結果になりました。

error

1AttributeError: module 'streamlit' has no attribute 'session_state' 2Traceback: 3File "/Users/toshiaki/anaconda3/envs/Campus-Dog/lib/python3.8/site-packages/streamlit/script_runner.py", line 337, in _run_script 4 exec(code, module.__dict__) 5File "/Users/toshiaki/workspace/Campus-Dog/main.py", line 17, in <module> 6 if "news" not in st.session_state:

私はキー名がnewssitesのセッションに空の辞書が代入されると思いました。
なぜなら、私は一度もセッションを触っておらず、かつ公式ドキュメントには、以下のように書かれているからです。

Initialization
if 'key' not in st.session_state:
st.session_state['key'] = 'value'

Session State also supports attribute based syntax
if 'key' not in st.session_state:
st.session_state.key = 'value'

これはst.session_stateを用いればセッションにアクセスできることを意味していると思います。

なお、私の環境は以下の通りです。
MacOS Big Sur
Streamlit 0.81.1
Python 3.8.8
パッケージ管理はAnacondaを使用

検索エンジンでエラーメッセージを検索しましたが、解決に役立つ情報は見つかりませんでした。

追記

ルートディレクトリでls -Rを実行した結果を以下に追記いたします。
![イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

attakei

2021/07/10 11:30 編集

main.pyと同じフォルダ・main.pyを実行した際のフォルダ等に、streamlit.pyなどのモジュールがありませんか? そのフォルダ上でlsなどを実行してどんなフォルダ・ファイルがあるかの確認をして追記してみてください。 (ファイル数がそこまで多くないのであれば、ls -R でフォルダ内を再帰的に確認するのが望ましいです)
guest

回答1

0

ベストアンサー

ソースとブログを読む限り、streamlitのSessionState機能は0.84で追加されたものです。

既存の環境は0.81.1なので、ドキュメント等にある内容とは乖離があるので、main.pyのコードは動かいでしょう。
このコードをそのままで使うなら、基本的にはstreamlitを0.84にアップデートする必要があります。

投稿2021/07/10 12:22

attakei

総合スコア2740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EbiTT

2021/07/10 12:34

ありがとうございます!バージョンアップにより解決致しました attakei様、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問