2

如何配置在 Windows 平台上setup.py安装带有.py前缀但在所有其他平台上没有前缀的脚本?我要解决的问题是Windows 需要一个.py扩展来识别和执行 Python 脚本

我有一个包设置如下:

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 上,它也安装myprogramC:\PythonXX\Scripts目录中,因此在命令行上无法识别。如何让安装脚本myprogrammyprogram.py在 Windows 上一样安装,以便 Windows 识别文件类型以使其可执行?

4

1 回答 1

0

我找到了答案:setup()called的关键字参数entry_points使用包含 的字典调用'console_scripts',如相关问题的答案中所述。

setup调用如下所示:

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

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

现在运行安装程序时,distribute 在C:\PythonXX\Scripts:myprogram-script.pymyprogram.exe. 因此,用户现在可以myprogram在 *nix 或 Windows 平台的命令行上输入,并始终让它运行相同的程序。非常便利!

于 2013-01-10T18:56:54.223 回答