我的 Google Colab 笔记本中有一个单元格,保存在 github 存储库中。该笔记本和其他一些笔记本中的某些单元在 github 浏览中未正确呈现。
单元格的实际代码是:
!redis-cli $REDIS_CONN PING
!redis-cli $REDIS_CONN SET hello world
!redis-cli $REDIS_CONN GET hello
但是随后它在 GitHub 视图中渲染 就搞砸了(见下图)。
问题出在 github 视图上 - 本地 git 克隆或“在 colab 中打开”后的实际代码仍然可以。
原始文件是通过 Colab 在 Github 中创建的 -> 将副本保存到 Github,但在我使用 VSCode 本地更改代码并提交更改后仍然存在。
我在这里做错了什么或者有任何解决方法可以使其正确渲染吗?
更新: 经过一番挖掘,两个美元符号之间的字符串似乎被解释为数学表达式,并由 GitHub 预览版使用 MathJax 进行渲染。实际上,您可以右键单击错误渲染的部分,它将显示 MathJax 菜单。所以问题就变成了:
如何在 GitHub 笔记本预览中选择性禁用 MathJax 渲染?
首先检查单元格的元数据将其指定为代码单元格:
{
"cell_type": "code",
"metadata": {},
"source": [
"!redis-cli $REDIS_CONN PING\n",
"!redis-cli $REDIS_CONN SET hello world\n",
"!redis-cli $REDIS_CONN GET hello\n"
]
}
并尝试使用三个反引号:在某些 Markdown 渲染器中,用三个反引号封装代码并指定语言可以帮助正确渲染。
```bash
!redis-cli $REDIS_CONN PING
!redis-cli $REDIS_CONN SET hello world
!redis-cli $REDIS_CONN GET hello
```
为了测试,您还可以尝试将 bash 命令分离到单独的代码单元中,看看这是否有助于渲染:
Cell 1:
!redis-cli $REDIS_CONN PING
Cell 2:
!redis-cli $REDIS_CONN SET hello world
Cell 3:
!redis-cli $REDIS_CONN GET hello
其他一些建议:
您可以尝试使用
&&
将命令合并到一行中,这是在一行中执行多个命令的 shell 命令。
!redis-cli $REDIS_CONN PING && redis-cli $REDIS_CONN SET hello world && redis-cli $REDIS_CONN GET hello
在你的笔记本中,它看起来像:
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6FFP3eCRBTzk",
"outputId": "4b27822f-fd36-4392-cfb5-4edee6050c55"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PONG\n",
"OK\n",
"\"world\"\n"
]
}
],
"source": [
"!redis-cli $REDIS_CONN PING && redis-cli $REDIS_CONN SET hello world && redis-cli $REDIS_CONN GET hello"
]
}
如果渲染问题仍然存在,并且可以接受,您可以考虑将 bash 命令移至外部 bash 脚本,然后从笔记本调用该脚本。
# save as commands.sh
redis-cli $REDIS_CONN PING
redis-cli $REDIS_CONN SET hello world
redis-cli $REDIS_CONN GET hello
在你的笔记本中:
!bash commands.sh
或者:您可以在单元格开头使用
!
魔术命令,而不是使用 %%bash
运行 bash 命令。这样,GitHub 就可以正确呈现单元格内容,因为它被显式标记为 bash 代码。
{
"cell_type": "code",
"metadata": {...},
"source": [
"%%bash\n",
"redis-cli $REDIS_CONN PING\n",
"redis-cli $REDIS_CONN SET hello world\n",
"redis-cli $REDIS_CONN GET hello\n"
]
}
检查(以防万一)在单元格开头添加 HTML 注释是否有助于解决渲染问题。
{
"cell_type": "code",
"metadata": {...},
"source": [
"<!-- Bash Commands -->\n",
"!redis-cli $REDIS_CONN PING\n",
"!redis-cli $REDIS_CONN SET hello world\n",
"!redis-cli $REDIS_CONN GET hello\n"
]
}
由于将命令拆分为单独的单元格并不是理想的解决方案,并且 GitHub 的渲染问题仍然存在,因此解决方法可能是使用外部渲染服务,例如 Jupyter 的 nbviewer。您可以在 GitHub 上的 README.md 文件顶部添加一个徽章,链接到笔记本的 nbviewer 渲染。
[![nbviewer](https://img.shields.io/badge/render-nbviewer-orange.svg)](https://nbviewer.jupyter.org/github/antonum/Redis-Workshops/blob/3d9084ac3f43348ea2a32c5c5265c32afe91e4cf/00-Setup/00-Setup_Redis_Workshops.ipynb)
单击徽章将使查看者看到正确渲染的笔记本版本。