【问题标题】:Streamlit: Disable the guard against running files without a .py extension?Streamlit:禁用对没有 .py 扩展名的运行文件的防护?
【发布时间】:2023-03-10 05:39:01
【问题描述】:

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

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

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

  • POSIX CLI 界面
  • 没有明显的语言标签或你有什么

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

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


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

在这种情况下,当我的脚本和可执行文件进入垃圾箱时,我会将它们从它们中剔除。从我的使用角度来看,我使用它时不需要知道它是由什么制成的。


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

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

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


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

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

【问题讨论】:

    标签: streamlit


    【解决方案1】:

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

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

    bin/sometool:

    #!/bin/bash
    
    DIR=$(dirname "$0")
    streamlit run "$DIR"/the_actual_script.py
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 2021-01-13
      • 2016-12-24
      • 2021-08-25
      • 2012-12-24
      相关资源
      最近更新 更多