はじめに
一から、いいえ、ゼロから1、nikkieです。
Streamlitのconfiguration(設定)の方法について、昨日以下の記事を書きました。
この中で設定の検証方法の筋が悪かったことに気づき、検証部分を再度アウトプットします(リトライ!)。
目次
- はじめに
- 目次
- Re: 検証:browser.gatherUsageStatsをfalseに設定する
- 「Collecting usage statistics. To deactivate, set browser.gatherUsageStats to False.」というメッセージが表示される仕組み
- 終わりに
Re: 検証:browser.gatherUsageStatsをfalseに設定する
環境変数やstreamlit run
の引数で設定されているかをアプリの表示で検証します。
from streamlit import config
し、config.get_option
で設定を確認できます!
https://github.com/streamlit/streamlit/blob/1.22.0/lib/streamlit/config.py#L131-L147
Return the current value of a given Streamlit config option.
意訳 与えられたStreamlitの設定オプションの現在の値を返す
使い方はconfig.get_option(key)
で、keyは"section.optionName"
形式の文字列です(例:"browser.gatherUsageStats"
)
検証用アプリ
browser.gatherUsageStatsの設定値を表示して確認しましょう。
app.py(前回の検証用アプリからの差分を示します)
import streamlit as st +from streamlit import config st.title("Awesome app!") + +st.write(f'{config.get_option("browser.gatherUsageStats")=}')
Dockerfileは前回同様です。
なお、前回Dockerを使ったのと揃えるために使っているにすぎず、手元でアプリを動かしても確認できます。
docker build -t practice_streamlit .
今回も「Streamlit, version 1.22.0」がインストールされたイメージです。
docker run --rm -it -p 8501:8501 practice_streamlit
http://127.0.0.1:8501/ にアクセスして、画面に表示している設定値を確認します。
config.get_option("browser.gatherUsageStats")=True
環境変数STREAMLIT_BROWSER_GATHER_USAGE_STATS
による設定
docker run --rm -it -e STREAMLIT_BROWSER_GATHER_USAGE_STATS=false -p 8501:8501 practice_streamlit
config.get_option("browser.gatherUsageStats")=False
環境変数で設定できています!
統計情報の収集は無効化されていますね🙌
trueを渡した時は、
docker run --rm -it -e STREAMLIT_BROWSER_GATHER_USAGE_STATS=true -p 8501:8501 practice_streamlit
config.get_option("browser.gatherUsageStats")=True
streamlit run
の引数--browser.gatherUsageStats
による設定
CMD命令を上書きして、streamlit run
を引数込みで渡します。
docker run --rm -it -p 8501:8501 practice_streamlit streamlit run app.py --browser.gatherUsageStats false
config.get_option("browser.gatherUsageStats")=False
trueに変えると
docker run --rm -it -p 8501:8501 practice_streamlit streamlit run app.py --browser.gatherUsageStats true
config.get_option("browser.gatherUsageStats")=True
優先順位の確認
Streamlitのconfiguration 4通りは、以下の箇条書きの番号が大きいほど優先です。
- グローバルのtomlファイル
- プロジェクトごとのtomlファイル
- 環境変数
streamlit run
の引数
環境変数よりstreamlit run
の引数が優先ということを確認しましょう。
- (A) 環境変数でgatherUsageStats=false、
streamlit run
の引数でtrue 👉streamlit run
の引数優先でtrueになるはず - (B) 環境変数でgatherUsageStats=true、
streamlit run
の引数でfalse 👉streamlit run
の引数優先でfalseになるはず
(A)の検証
docker run --rm -it -e STREAMLIT_BROWSER_GATHER_USAGE_STATS=false -p 8501:8501 practice_streamlit streamlit run app.py --browser.gatherUsageStats true
config.get_option("browser.gatherUsageStats")=True
streamlit run
の引数が優先されていますね!
(B)の検証
docker run --rm -it -e STREAMLIT_BROWSER_GATHER_USAGE_STATS=true -p 8501:8501 practice_streamlit streamlit run app.py --browser.gatherUsageStats false
config.get_option("browser.gatherUsageStats")=False
streamlit run
の引数が優先されることが確認できました!
「Collecting usage statistics. To deactivate, set browser.gatherUsageStats to False.」というメッセージが表示される仕組み
このメッセージ(_TELEMETRY_HEADLESS_TEXT
)2はheadlessモードで動かしているとき、browser.gatherUsageStats
が設定されていなければ出るという実装のようでした。
https://github.com/streamlit/streamlit/blob/1.22.0/lib/streamlit/runtime/credentials.py#L356-L360
if not _check_credential_file_exists() and config.get_option("server.headless"): if not config.is_manually_set("browser.gatherUsageStats"): # If not manually defined, show short message about usage stats gathering. click.secho(_TELEMETRY_HEADLESS_TEXT)
(不正確ですが短く言えば)config.get_option("server.headless")
がTrue
のときに外側のif
文のブロックが実行されます。
これは--server.headless
引数で設定でき、ヘルプには以下のようにあります。
--server.headless BOOLEAN
If false, will attempt to open a browser window on start.
Default: false unless (1) we are on a Linux box where DISPLAY is unset,
or (2) we are running in the Streamlit Atom plugin.
[env var: STREAMLIT_SERVER_HEADLESS]
ブラウザが自動で起動しないモードの設定ですね。
詳細まで見切れていませんが、コンテナをrunしたとき、(1)を満たすのでtrueなのだと思います。
config.is_manually_set
の実装は以下です。
https://github.com/streamlit/streamlit/blob/1.22.0/lib/streamlit/config.py#L970-L988
Check if a given option was actually defined by the user.
意訳 与えられた設定オプションが実際にユーザによって定義されたかを確認する
4通りの設定方法のいずれかでも設定されていたら、設定値によらずTrue
を返すということですね。
私が勘違いしたのは、browser.gatherUsageStats
がtrueに設定されているときに限り、「Collecting usage statistics. To deactivate, set browser.gatherUsageStats to False.」というメッセージが出るというものです(これは誤解でした)。
実装を見ると、trueでもfalseでも、browser.gatherUsageStats
が設定さえされていればこのメッセージは出ませんね。
終わりに
Streamlitの設定値はconfig.get_option
で確認できるというアウトプットでした。
Streamlitは4通りで設定できる! browser.gatherUsageStatsを例に - nikkie-ftnextの日記の動作検証も再実施しています。
browser.gatherUsageStats
はfalseになっていることが起動中のログから確認できないようで、「本当にfalseに設定できてる?(ドキュメントに沿ったからできてるはず)」と小さい不安を抱えていました。
今回確認できたので、この不安は退屈に変わりました!🙌