如何配置 setup.py 在 Windows 平台上安装带有 .py 前缀但在所有其他平台上没有前缀的脚本?我要解决的问题是 Windows requires a .py extension to recognize and execute Python scripts .
我有一个如下设置的包:
MyPackage
├── CHANGES
├── ...
├── scripts
│ └── myprogram
├── setup.py
└── mypackage
├── __init__.py
├── ...
└── myprogram.py
在我的 setup.py 文件中,我将 scripts/myprogram 声明为可安装的脚本
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from setuptools import setup
...
setup(
name='MyPackage',
...
packages=['mypackage'],
scripts=['scripts/myprogram'],
...
)
myprogram 脚本只是一个简单的包装器,它只调用 mypackage.myprogram.main():
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from mypackage import myprogram
myprogram.main()
在 *nix 平台上,这会将 myprogram 安装为名称为 myprogram 的可执行文件,这是我想要的,但在 Windows 上,它也会安装为 >myprogram 在 C:\PythonXX\Scripts 目录中,因此无法在命令行上识别。如何获取安装脚本以在 Windows 上将 myprogram 安装为 myprogram.py,以便 Windows 识别文件类型以使其可执行?
请您参考如下方法:
我找到了答案:setup() 的关键字参数称为 entry_points,它带有一个包含 'console_scripts' 的字典,如this answer到 related question .
新的 setup 调用如下所示:
setup(
name='MyPackage',
...
packages=['mypackage'],
entry_points={
'console_scripts': [
'myprogram = mypackage.myprogram:main'
]
}
...
)
进行这些更改后,我删除了 scripts 目录和其中的 myprogram 文件。
现在运行安装程序时,distribute 在 C:\PythonXX\Scripts 下创建两个文件:myprogram-script.py 和 myprogram.exe。因此,用户现在可以在 *nix 或 Windows 平台的命令行中输入 myprogram,并始终运行相同的程序。非常方便!
