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

时间:2013-01-10 17:56:38

标签: python package

如何配置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中安装{ {1}}目录,因此无法在命令行中识别。如何让安装脚本在Windows上安装C:\PythonXX\Scripts myprogram,以便Windows识别文件类型以使其可执行?

1 个答案:

答案 0 :(得分:0)

我找到了答案:setup()的关键字参数称为entry_points,其字典包含'console_scripts',如this answerrelated question中所述。

新的setup调用如下所示:

 setup(
    name='MyPackage',
    ...
    packages=['mypackage'],
    entry_points={
        'console_scripts': [
            'myprogram = mypackage.myprogram:main'
        ]
    }
    ...
)

进行这些更改后,我删除了scripts目录和myprogram文件。

现在,在运行安装程序时,分发会在C:\PythonXX\Scripts下创建两个文件:myprogram-script.pymyprogram.exe。因此,用户现在可以在* nix或Windows平台的命令行上输入myprogram,并始终让它运行相同的程序。非常方便!