如何配置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.pymyprogram.exe。结果,用户现在可以在* nix或Windows平台的命令行上输入myprogram,并且始终让它运行相同的程序。非常便利!

关于python - 在Windows平台上安装脚本时添加.py扩展名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14264234/

10-11 03:38