python 包中的命令行脚本:它们在 windows 机器上工作还是只在 Linux 上工作?

Command line scripts in python package: Do they work on windows machines or only on Linux?

我正在 windows 机器上试验命令行脚本,如 here 所述。我创建了一个简单的 python 包如下:

Folder PATH listing
Volume serial number is 986C-80E1
C:.
│   setup.py
│
├───bin
│       funniest-joke
│
└───funniest
        funniest.py
        __init__.py

我在下面列出了每个文件的内容以确保再现性:

setup.py

import setuptools

setuptools.setup(
  name='test',
  scripts=['bin/funniest-joke'],
  packages=setuptools.find_packages()
)

bin/funniest-joke

这是命令行脚本:

import funniest
print(funniest.joke)

funniest/funniest.py

joke = "a funny joke"

funniest/__init__.py

from .funniest import joke

当我运行 pip install -e . 包安装成功。但是,通过在命令行中键入 funniest-joke 然后“Enter”直接 运行ning 脚本是行不通的。我收到 windows 菜单询问我想如何打开文件:

python 包中的命令行脚本严格来说是 Linux 的东西吗?我怎样才能让它在 windows 上工作?

这可能不是您想要的答案:Windows 通过将文件扩展名与执行方法相关联来工作。问题是:funniest-joke 没有文件扩展名,所以 Windows 不知道应该调用什么执行方法来执行文件。所以,它问你。 (您想做什么:编写一个直接调用 python 的 PowerShell 或 CMD 包装器脚本。)

Linux 查看文件的第一行(或前 n 字节,例如 512 到 4096 字节)以确定执行方法。脚本有一个 shebang,“#!”。本机可执行文件具有不同的签名。如果你真的想了解细节,请查看 exec 系统调用的源代码,或查看 file 命令的手册页。