Publish a Component
Publish to PyPI
将您的Streamlit组件发布到PyPI可以让世界各地的Python用户轻松访问。此步骤完全是可选的,因此如果您不打算公开发布您的组件,可以跳过此部分!
注意
对于静态Streamlit组件,将Python包发布到PyPI的步骤与核心PyPI打包说明相同。静态组件可能只包含Python代码,因此一旦你正确设置了setup.py文件并生成了分发文件,你就可以上传到PyPI了。
Bi-directional Streamlit Components 至少包括Python和JavaScript代码,因此,在发布到PyPI之前需要做一些额外的准备工作。本页的其余部分将重点介绍双向组件的准备过程。
Prepare your Component
双向Streamlit组件与纯Python库略有不同,因为它必须包含预编译的前端代码。这也是基础Streamlit的工作方式;当你pip install streamlit
时,你得到的是一个Python库,其中包含的HTML和前端代码已被编译成静态资源。
component-template GitHub 仓库提供了 PyPI 发布所需的文件夹结构。但在发布之前,您需要进行一些准备工作:
-
给你的组件命名,如果你还没有这样做
- 将
template/my_component/
文件夹重命名为template/<组件名称>/
- 将你的组件名称作为第一个参数传递给
declare_component()
- 将
-
编辑
MANIFEST.in
,将递归包含的路径从package/frontend/build *
更改为/frontend/build * -
编辑
setup.py
,添加你的组件名称和其他相关信息 -
创建前端代码的发布版本。这将添加一个新目录,
frontend/build/
,其中包含您编译的前端代码:cd frontend npm run build
-
将构建文件夹的路径作为
path
参数传递给declare_component
。(如果您使用的是模板Python文件,可以在文件顶部设置_RELEASE = True
):import streamlit.components.v1 as components # 更改这个: # component = components.declare_component("my_component", url="http://localhost:3001") # 改为这个: parent_dir = os.path.dirname(os.path.abspath(__file__)) build_dir = os.path.join(parent_dir, "frontend/build") component = components.declare_component("new_component_name", path=build_dir)
Build a Python wheel
一旦你更改了默认的my_component
引用,编译了HTML和JavaScript代码,并在components.declare_component()
中设置了新的组件名称,你就可以准备构建一个Python wheel了:
-
确保你有最新版本的 setuptools、wheel 和 twine
-
从源代码创建一个wheel包:
# 从你的组件的顶级目录运行此命令;也就是说, # 包含 `setup.py` 的目录 python setup.py sdist bdist_wheel
Upload your wheel to PyPI
创建好你的wheel后,最后一步是上传到PyPI。这里的说明重点介绍了如何上传到Test PyPI,这样你就可以学习这个过程的操作,而不用担心搞砸任何事情。上传到PyPI遵循相同的基本步骤。
-
如果您还没有账户,请在Test PyPI上创建一个账户
-
访问https://test.pypi.org/manage/account/#api-tokens并创建一个新的API令牌。不要将令牌范围限制在特定项目上,因为您正在创建一个新项目。在关闭页面之前复制您的令牌,因为您将无法再次检索它。
-
将你的wheel上传到Test PyPI。
twine
会提示你输入用户名和密码。对于用户名,使用__token__。对于密码,使用你在上一步中获得的token值,包括pypi-
前缀:python -m twine upload --repository testpypi dist/*
-
在一个新的Python项目中安装你刚刚上传的包,以确保它能正常工作:
python -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg-YOUR-USERNAME-HERE
如果一切顺利,您可以按照https://packaging.python.org/tutorials/packaging-projects/#next-steps上的说明将您的库上传到PyPI。
恭喜,您已经创建了一个公开可用的Streamlit组件!
Promote your Component!
我们很乐意帮助您与Streamlit社区分享您的组件!要分享它:
-
如果您在GitHub上托管您的代码,请添加标签
streamlit-component
,以便它列在GitHub streamlit-component主题中:将streamlit-component标签添加到您的GitHub仓库
-
在Streamlit论坛的Show the Community!板块发帖。使用类似于“新组件:
,一种实现X的新方法”的帖子标题。 -
将您的组件添加到社区组件跟踪器。
-
在@streamlit上给我们发推文,这样我们可以帮你转发你的公告。
我们的组件库大约每月更新一次。遵循上述建议,以最大限度地提高您的组件进入我们组件库的可能性。我们文档中展示的社区组件是不定期手工挑选的。拥有许多星标和良好文档的流行组件更有可能被选中。
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。