Skip to main content
 首页 » 编程设计

python之在 Windows 平台上安装脚本时添加 .py 扩展名

2025年05月04日11lhb25

如何配置 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,并始终运行相同的程序。非常方便!