python Streamlit中的自定义组件在加载时遇到问题

yc0p9oo0  于 2023-02-28  发布在  Python
关注(0)|答案(1)|浏览(301)

我正在为我的Streamlit应用测试一个定制的authentication component。但是,当在生产中使用该组件时,由于某种原因,它无法渲染。x1c 0d1x
我已经设法让i在开发模式下工作,方法是派生代码并将其添加到我的Streamlit项目中--但我仍然无法让它在生产环境中运行。
经过深入研究,我发现组件的声明失败了,因为构建路径由于某种原因不起作用。Assert失败了,因为根据下面的回溯,模块为none

venv\lib\site-packages\streamlit\components\v1\components.py:284, in declare_component(name, path, url)
    281 # Get the caller's module name. `__name__` gives us the module's
    282 # fully-qualified name, which includes its package.
    283 module = inspect.getmodule(caller_frame)
--> 284 assert module is not None
...
    288 # user executed `python my_component.py`), then this name will be
    289 # "__main__" instead of the actual package name. In this case, we use
    290 # the main module's filename, sans `.py` extension, as the component name.

AssertionError:

要获得build_path,我使用以下代码:

root_dir = os.path.dirname(os.path.abspath(__file__))
build_dir = os.path.join(root_dir, "frontend" , "dist")

这将返回:

'c:\\Users\\initials\\xxx\\Desktop\\Absence importer\\absense_importer\\frontend\\dist'

组件声明如下:

_USE_WEB_DEV_SERVER = os.getenv("USE_WEB_DEV_SERVER", False)
_WEB_DEV_SERVER_URL = os.getenv("WEB_DEV_SERVER_URL", "http://localhost:5173")
COMPONENT_NAME = "msal_authentication"

root_dir = os.path.dirname(os.path.abspath(__file__))
build_dir = os.path.join(root_dir, "frontend" , "dist")

if _USE_WEB_DEV_SERVER:
    _component_func = components.declare_component(name=COMPONENT_NAME, url=_WEB_DEV_SERVER_URL)
else:
    _component_func = components.declare_component(name=COMPONENT_NAME, path=build_dir)

我也尝试过将所有内容 Package 在LinuxDocker容器中,但不幸的是,没有效果。
我使用的是Python 3.10.7和Streamlit 1.18.1。

i5desfxk

i5desfxk1#

这个组件似乎有问题--您是否考虑过提交问题?https://github.com/mstaal/msal_streamlit_authentication/issues
如果这不起作用,我会尝试在build_dir变量中查找该文件夹,看看是否有任何内容(例如index.html和一些JS文件),如果没有,可能需要修改查找build_dir的代码。
如果该文件夹中有内容,则可能存在导致Windows不支持它的问题,这可能需要对组件代码进行更深入的挖掘。

相关问题