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
命令的手册页。
我正在 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
命令的手册页。