就像其他人在这里和其他地方评论的那样,支持功能似乎根本不起作用(至少不适用于 setuptools)。经过一整天的各种资源搜索后,我找到了一种至少可以创建桌面快捷方式的方法。我正在分享我的解决方案(基本上是我在这里和这里找到的代码组合)。我应该补充一点,我的情况与yasar的情况略有不同,因为它创建了一个已安装包的快捷方式(即 Python 的Scripts目录中的 .exe 文件)而不是脚本。
简而言之,我在 setup.py 中添加了一个post_install函数,然后使用Windows 的 Python 扩展来创建快捷方式。桌面文件夹的位置是从 Windows 注册表中读取的(还有其他方法可以做到这一点,但如果桌面位于非标准位置,它们可能不可靠)。
#!/usr/bin/env python
import os
import sys
import sysconfig
if sys.platform == 'win32':
from win32com.client import Dispatch
import winreg
def get_reg(name,path):
# Read variable from Windows Registry
# From https://stackoverflow.com/a/35286642
try:
registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, path, 0,
winreg.KEY_READ)
value, regtype = winreg.QueryValueEx(registry_key, name)
winreg.CloseKey(registry_key)
return value
except WindowsError:
return None
def post_install():
# Creates a Desktop shortcut to the installed software
# Package name
packageName = 'mypackage'
# Scripts directory (location of launcher script)
scriptsDir = sysconfig.get_path('scripts')
# Target of shortcut
target = os.path.join(scriptsDir, packageName + '.exe')
# Name of link file
linkName = packageName + '.lnk'
# Read location of Windows desktop folder from registry
regName = 'Desktop'
regPath = r'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders'
desktopFolder = os.path.normpath(get_reg(regName,regPath))
# Path to location of link file
pathLink = os.path.join(desktopFolder, linkName)
shell = Dispatch('WScript.Shell')
shortcut = shell.CreateShortCut(pathLink)
shortcut.Targetpath = target
shortcut.WorkingDirectory = scriptsDir
shortcut.IconLocation = target
shortcut.save()
setup(name='mypackage',
...,
...)
if sys.argv[1] == 'install' and sys.platform == 'win32':
post_install()
这是我使用它的完整设置脚本的链接:
https://github.com/KBNLresearch/iromlab/blob/master/setup.py