Source code for pymyinstall.installhelper.link_shortcuts
"""
Various helper about shortcuts and links
:githublink:`%|py|5`
"""
import os
import sys
import platform
if sys.version_info[0] == 2:
FileNotFoundError = Exception
[docs]def add_shortcut_to_desktop(file, name, description="", arguments="", icon=None, workdir=None):
"""
:func:`add_shortcut <pymyinstall.installhelper.link_shortcuts.add_shortcut>`
:githublink:`%|py|17`
"""
return add_shortcut(file, name, description, arguments, icon, workdir)
[docs]def add_shortcut(target, name, description="", arguments="",
icon=None, workdir=None, folder=None):
"""
Adds a shortcut to the desktop.
:param target: target
:param name: name of the shortcut
:param description: description
:param arguments: arguments
:param icon: icon
:param workdir: working directory
:param folder: where to save the shortcut (None for the desktop)
:return: path to the shortcut
:githublink:`%|py|34`
"""
if not sys.platform.startswith("win"):
raise NotImplementedError(
"not implemented on this platform: " +
sys.platform)
try:
import winshell
except ImportError as e:
if "DLL load failed" in str(e):
os.environ["PATH"] = os.environ[
"PATH"] + ";" + os.path.split(sys.executable)[0] + r"\lib\site-packages\pywin32_system32"
try:
import winshell
except ImportError:
raise ImportError(
r"you should run the following in your current folder:\ncopy C:\%s\lib\site-packages\pywin32_system32\py*.dll %s" %
(os.path.split(
sys.executable),
os.getcwd())) from e
else:
raise e
if folder is None:
folder = winshell.desktop()
link_filepath = os.path.join(folder, name + ".lnk")
args = ["/c", "start", target, arguments]
with winshell.shortcut(link_filepath) as link:
link.path = r"%windir%\system32\cmd.exe"
link.description = description if description is not None else name
link.arguments = " ".join(args)
if icon is not None:
link.icon_location = (icon, 0)
if workdir is not None:
link.working_directory = workdir
if not os.path.exists(link_filepath):
raise FileNotFoundError(link_filepath)
return link_filepath
[docs]def suffix():
"""
add a suffix to a shortcut name = python version + architecture
:return: string
:githublink:`%|py|82`
"""
ver = ".".join(str(_) for _ in sys.version_info[:2])
arc = platform.architecture()[0]
return "{0}.{1}".format(arc, ver)
if __name__ == "__main__":
path = r"C:\github\pymyinstall\dist\win_python_setup"
target = r"tools\R\bin\R.exe"
name = "R Console"
icon = r"tools\icons\r.ico"
add_shortcut(target=target, folder=path, icon=icon, name=name)
path = r"C:\github\pymyinstall\dist\win_python_setup"
target = r"python\python.exe"
name = "Python Console"
icon = r"tools\icons\python.ico"
add_shortcut(target=target, folder=path, icon=icon, name=name)