インストール後のスクリプトは、ネイティブの Windows インストール ルーチンで実行されます。
Fuctions get_special_folder_path
、directory_created
、directory_created
およびcreate_shortcut
は pythonic ではありません。たとえば、キーワードと引数のペアとして呼び出すことはできません。位置的にのみです。関数はhttps://github.com/python/cpython/blob/master/PC/bdist_wininst/install.cで定義されています
ショートカットを作成するためのルーチンは、システム インターフェイスIShellLink
( shell32.dll の "lives" ) のラッパーとして機能し、504 行目から始まります。
static PyObject *CreateShortcut(PyObject *self, PyObject *args)
{...
そして、643 行目でリンクされています。
PyMethodDef meth[] = {
{"create_shortcut", CreateShortcut, METH_VARARGS, NULL},
{"get_special_folder_path", GetSpecialFolderPath, METH_VARARGS, NULL},
...
};
ローカル インストールでは、上記の C コードは既に実行可能ファイルにコンパイルされています。
C:\Python26\Lib\distutils\command\wininst-6.0.exe
C:\Python26\Lib\distutils\command\wininst-7.1.exe
C:\Python26\Lib\distutils\command\wininst-8.0.exe
C:\Python26\Lib\distutils\command\wininst-9.0.exe
C:\Python26\Lib\distutils\command\wininst-9.0-amd64.exe
したがって、答え: 関数 create_shortcut() をインポートするための python lib はありません。これは、Windows のポストインストール スクリプト内でのみそのまま使用できます。
自動および手動の両方のポストインストール シナリオをサポートする場合は、pywin32 の回避策を参照してください。
https://github.com/mhammond/pywin32/blob/master/pywin32_postinstall.py行 80
try:
create_shortcut
except NameError:
# Create a function with the same signature as create_shortcut provided
# by bdist_wininst
def create_shortcut(path, description, filename,
arguments="", workdir="", iconpath="", iconindex=0):
import pythoncom
from win32com.shell import shell, shellcon
ilink = pythoncom.CoCreateInstance(shell.CLSID_ShellLink, None,
pythoncom.CLSCTX_INPROC_SERVER,
shell.IID_IShellLink)
ilink.SetPath(path)
ilink.SetDescription(description)
if arguments:
ilink.SetArguments(arguments)
if workdir:
ilink.SetWorkingDirectory(workdir)
if iconpath or iconindex:
ilink.SetIconLocation(iconpath, iconindex)
# now save it.
ipf = ilink.QueryInterface(pythoncom.IID_IPersistFile)
ipf.Save(filename, 0)