如何配置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识别文件类型以使其可执行?
答案 0 :(得分:0)
我找到了答案: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
文件。
现在,在运行安装程序时,分发会在C:\PythonXX\Scripts
下创建两个文件:myprogram-script.py
和myprogram.exe
。因此,用户现在可以在* nix或Windows平台的命令行上输入myprogram
,并始终让它运行相同的程序。非常方便!