【问题标题】:How do I make a python script executable?如何使 python 脚本可执行?
【发布时间】:2015-02-14 04:21:14
【问题描述】:

我怎样才能用我自己的命令行名称(如“myscript”)运行 python 脚本,而不必在终端中执行“python myscript.py”?

【问题讨论】:

标签: python command-line


【解决方案1】:
  1. 在脚本顶部添加一个 shebang 行:

    #!/usr/bin/env python

  2. 将脚本标记为可执行:

    chmod +x myscript.py

  3. 将包含它的目录添加到您的PATH 变量中。 (如果你想让它坚持下去,你必须在你的主目录中的.bashrc.bash_profile 中执行此操作。)

    export PATH=/path/to/script:$PATH

【讨论】:

  • 仍然无法以我的名字 'square' 运行:-bash: /usr/bin/square: 没有这样的文件或目录
  • 我的程序叫做 square,我已经在 PATH 中导出了目录
  • @bingo14 echo $PATH 的输出是什么?以及脚本的绝对路径?
  • 它是:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin: /Development/adt-bundle/sdk/platform-tools:/Development/adt-bundle/sdk/tools
  • 因此需要将其添加到您的路径中,就像我在回答中的第 3 点中显示的那样。
【解决方案2】:

跨平台的最佳方式是创建setup.py,在其中定义一个入口点并使用pip 安装。

假设你有myscript.py的以下内容:

def run():
    print('Hello world')

然后你添加setup.py 如下:

from setuptools import setup
setup(
    name='myscript',
    version='0.0.1',
    entry_points={
        'console_scripts': [
            'myscript=myscript:run'
        ]
    }
)

入口点格式为terminal_command_name=python_script_name:main_method_name

最后使用以下命令安装。

pip install -e /path/to/script/folder

-e 代表可编辑,这意味着您将能够处理脚本并调用最新版本而无需重新安装

之后,您可以从任何目录运行myscript

【讨论】:

  • 是否可以调用像myscript update这样的入口点或只调用myscript_update
  • @NikitaProkaiev 在myscript update 中,update 是脚本的命令行参数——就像你运行python myscript.py update 一样。除非您在脚本中编写代码来处理命令行参数,否则它将无效。您可以在console_scripts 中定义另一个条目,例如myscript_update=myscript:update,在这种情况下,调用一个名为update 的函数。
【解决方案3】:

我通常在脚本中这样做:

#!/usr/bin/python
... code ...

在终端:

$: chmod 755 yourfile.py
$: ./yourfile.py

【讨论】:

  • 避免硬编码路径到 python,更喜欢/usr/bin/env python
【解决方案4】:

另一种可能有人感兴趣的相关解决方案。也可以直接将 myscript.py 的内容嵌入到 Linux 上的 .bashrc 文件中(我认为应该也适用于 MacOS)

例如,我在 .bashrc 中定义了以下函数,用于将 Python 泡菜转储到终端,注意 ${1} 是函数名后面的第一个参数:

depickle() {
python << EOPYTHON
import pickle
f = open('${1}', 'rb')
while True:
   try:
      print(pickle.load(f))
   except EOFError:
      break
EOPYTHON
}

有了这个(并且在重新加载 .bashrc 之后),我现在可以从我计算机上的任何终端或目录运行 depickle a.pickle

【讨论】:

    【解决方案5】:

    我想到的最简单的方法是使用“pyinstaller”。

    1. 创建一个包含您在代码中使用的所有库的环境。
    2. 激活环境并在命令窗口中写入pip install pyinstaller
    3. 使用命令窗口打开代码maincode.py所在的主目录。
    4. 记得保持环境活跃并写pyinstaller maincode.py
    5. 检查名为“build”的文件夹,您将找到可执行文件。

    我希望这个解决方案对您有所帮助。 总账

    【讨论】:

      【解决方案6】:

      如果脚本是由使用Nssm 工具创建的服务运行的,我已经为找不到命令py -3 或任何其他与pylauncher 命令相关的问题苦苦挣扎了几天。
      但是当直接从 cmd 运行时,相同的命令也有效。
      解决方案是什么?只需重新运行 Python 安装程序并在最后单击禁用路径长度限制的选项。
      我将把它留在这里,以便任何人都可以使用此答案并发现它有帮助。

      【讨论】:

        猜你喜欢
        • 2010-10-28
        • 2014-07-05
        • 2016-08-02
        • 1970-01-01
        • 2014-08-09
        • 2013-06-14
        • 1970-01-01
        • 2011-05-13
        相关资源
        最近更新 更多