python - python 包中的命令行脚本:它们是在 Windows 机器上工作还是只在 Linux 上工作?
问题描述
如here所述,我正在Windows机器上试验命令行脚本。我创建了一个简单的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 .
包安装成功。但是,通过在命令行中键入然后“Enter”直接运行脚本funniest-joke
是行不通的。我得到 windows 菜单,询问我想如何打开文件:
python包中的命令行脚本严格来说是Linux的东西吗?我怎样才能让它在 Windows 上工作?
解决方案
这可能不是您想要的答案:Windows 通过将文件扩展名与执行方法相关联来工作。问题是:funniest-joke
没有文件扩展名,所以 Windows 不知道它应该调用什么执行方法来执行文件。所以,它问你。(您想要做的:编写一个python
直接调用的 PowerShell 或 CMD 包装脚本。)
Linux 查看文件的第一行(或第一个n
字节,例如 512 到 4096 字节)以确定执行方法。脚本有一个shebang,“ #!
”。本机机器可执行文件具有不同的签名。如果您真的想了解详细信息,请查看exec
系统调用的源代码,或查看file
命令的手册页。
推荐阅读
- python - 我一直在研究自定义语言翻译器。它可以正常工作,但是,当我尝试输入逗号时,它会显示一堆错误
- java - 子类加载器和服务提供者接口 (SPI)
- javascript - FFI 中带有 Aff 回调的函数
- css - 用于 XML 的 CSS 在 Google Chrome 上无法正常工作
- selenium-webdriver - 用于捕获请求和响应的 Selenium 和 BrowserMob 代理
- typescript - Puppeteer:如何点击带有特定标签的按钮?
- python - K-means 无法正确绘制
- excel - 尝试根据 ID 计算一系列数据的平均值、最小值和最大值
- r - SHINY中侧边栏面板的垂直滚动
- python - Django url 路径,home url 总是覆盖路径('',views.home,name='home')