运行 来自任何目录的命令行中的 python 脚本
running a python script in the command line from any directory
提前为一个幼稚的问题道歉!我一直在这里进行一些挖掘,但仍然感到有些困惑。
我有一个 python 脚本,我希望它可以从 bash shell 中的任何地方执行(比如 git
、homebrew
, neofetch
,等都可以调用)。我已经使用 pyinstall
制作了一个可执行文件,但我不太清楚该怎么做。我尝试将构建文件夹移动到 usr/local
并将可执行文件的别名放入 usr/local/bin
,但是当我尝试从 shell 运行 时出现 'cannot execute binary file' 错误].我在 urs/local/bin
中引用 'git' 别名后尝试了此操作,并看到它指向 usr/local
.
中的可执行文件
有没有人知道任何建议,或者知道任何好的资源来尝试理解我做错了什么?非常感谢!
对于简单的脚本,使其可执行的最简单方法是简单地添加 Python shebang line, save the script to a directory that's on your 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 with a proper 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
设置为控制台脚本入口点。
提前为一个幼稚的问题道歉!我一直在这里进行一些挖掘,但仍然感到有些困惑。
我有一个 python 脚本,我希望它可以从 bash shell 中的任何地方执行(比如 git
、homebrew
, neofetch
,等都可以调用)。我已经使用 pyinstall
制作了一个可执行文件,但我不太清楚该怎么做。我尝试将构建文件夹移动到 usr/local
并将可执行文件的别名放入 usr/local/bin
,但是当我尝试从 shell 运行 时出现 'cannot execute binary file' 错误].我在 urs/local/bin
中引用 'git' 别名后尝试了此操作,并看到它指向 usr/local
.
有没有人知道任何建议,或者知道任何好的资源来尝试理解我做错了什么?非常感谢!
对于简单的脚本,使其可执行的最简单方法是简单地添加 Python shebang line, save the script to a directory that's on your 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 with a proper 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
设置为控制台脚本入口点。