【问题标题】:running a python script in the command line from any directory从任何目录在命令行中运行 python 脚本
【发布时间】:2020-08-12 21:42:39
【问题描述】:

提前为一个幼稚的问题道歉!我一直在这里做一些挖掘,仍然感到有些困惑。

我有一个 python 脚本,我想在 bash shell 中的任何位置执行它(例如如何调用 githomebrewneofetch 等)。我用pyinstall 制作了一个可执行文件,但我不太清楚如何处理它。我尝试将构建文件夹移动到usr/local 并将可执行文件的别名放在usr/local/bin 中,但是在尝试从shell 运行时出现“无法执行二进制文件”错误。我在引用urs/local/bin 中的“git”别名后尝试了此操作,并看到它指向了usr/local 中的可执行文件。

有没有人知道任何建议,或者知道任何好的资源来尝试了解我做错了什么?非常感谢!

【问题讨论】:

    标签: python bash shell command-line executable


    【解决方案1】:

    对于一个简单的脚本,使其可执行的最简单方法是简单地添加一个 Python shebang line,将脚本保存到您的 PATH 上的目录(例如 /usr/local/bin)并在脚本。

    例如

    #!/usr/bin/python3
    import sys
    print('Hello, world! I am Python', sys.version)
    

    另存为/usr/local/bin/python-hello,后跟chmod u+x /usr/local/bin/python-hello,让您可以在任何地方执行python-hello

    更复杂的脚本最好由packaging them correctly 使用适当的console_scripts entry point 来执行——尽管带有 PyInstaller 的东西也可以工作,尽管它会更重。

    编辑

    一个包含多个模块的脚本应该组织成一个包,例如

    python_hello/
      __init__.py
      __main__.py
      greetings.py
    

    __main__.py 可能看起来像

    def main():
        # ...
    
    if __name__ == "__main__":
        main()
    

    这样您可以使用python -m python_hello 运行脚本,并将python_hello.__main__:main 设置为控制台脚本入口点。

    【讨论】:

    • 这非常有用。如果我有几个模块,是否有一种“正确”的方式来组织它们?如果我确实想使用这个与 pyinstaller 一起打包的东西,我犯了一个愚蠢的错误吗?我很困惑为什么将构建文件夹放在 usr/local 中,为 exe 创建别名并将其放在 usr/local/bin 中无法按预期运行。非常感谢!
    • 您是在使用 usr/local(usr 目录是相对于您当前目录并在其下)还是 /usr/local,它是您的 $PATH 中的系统目录?
    • @sevenr /usr/local
    • @joooby 添加了关于包的解释:)
    猜你喜欢
    • 2017-12-07
    • 2015-10-31
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多