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