Streamlit:禁用对 运行 没有 .py 扩展名的文件的保护?

Streamlit: Disable the guard against running files without a .py extension?

我有问题。总的来说,我在 Unix 系统中工作的经验是,当你准备好将一个可执行文件“东西”放在 bin 文件夹中以供全局访问时,你已经决定 #! 使用必要的解释器文件:

#!/bin/awk
#!/bin/bash
#!/bin/perl
#!/bin/python3.8
#!/bin/whatever

而且,虽然在本地范围内有杂乱无章是可以的,但是当将可执行文件放入 bin 文件夹时,它应该具有:

这是因为它现在打算用于需要忘记这种或那种语言的细节的困难工作:现在需要根据功能来思考好像可组合单元是一致语言的一部分,而不是来自十几个不同专家贡献者的十几种不同语言。

这是 Unix/Linux/Posix 架构的“天才”。


无论如何,在构建我的 python 项目时,最终的目标是将 python 可执行文件复制到路径上的全局源——无论那个“全局”源是否是我的假装全局源主目录(即 ~/.mytools/bin 或实际的全局路径,/usr/bin 或类似的东西——通常我希望我的 python 可执行文件具有与 C 可执行文件相同的“游戏感觉”, perl 可执行文件,BASH/ZSH/etc。可执行文件。

在这种情况下,当我的脚本和可执行文件进入垃圾箱时,我会删除它们的扩展。从我的使用角度来看,当我去使用它时,没有必要知道它是由什么制成的。


但是,streamlit 要求我将 .py 重新附加到全局路径中的文件,以便 运行 和 streamlit run。从我的角度来看,这是一个图书馆超出其有用价值并将我扣为人质的案例,除非我在使用 python 可执行文件扩展 bin 文件夹时违反了最佳实践。

这意味着我必须创建特殊的逻辑来处理 streamlit,这真的是一个混乱。我必须:改变我处理所有可执行文件的方式,或者只硬编码将 运行 与 streamlit 的可执行文件。这意味着,突然之间,我的项目元控制代码中有了一个任意名称。

这很糟糕。为什么?因为我必须记住我做了它,并且如果我更改了可执行文件名称,请记住更改它。如果我添加另一个 streamlit 可执行文件,我还必须记住添加它。


或者,我可以将所有使用 python 制作的 exe 文件复制到带有 .py 扩展名的根 bin 文件夹中,这不是我想要做的。

如何在 streamlit 中绕过这个问题?

如果 bin/sometool 需要通过 streamlit run bin/sometool 使用 Streamlit 调用,那么您似乎已经向 bin 脚本的用户公开了“元控制代码”,对吗?

相反,这会解决您的问题吗?

bin/sometool:

#!/bin/bash

DIR=$(dirname "[=10=]")
streamlit run "$DIR"/the_actual_script.py

(其中 the_actual_script.py 位于 bin 内,但具有 chmod -x,因此它不能直接执行。)