#-----------------------------------------------------------------------------
|
# Copyright (c) 2013-2023, PyInstaller Development Team.
|
#
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
# you may not use this file except in compliance with the License.
|
#
|
# The full license is in the file COPYING.txt, distributed with this software.
|
#
|
# SPDX-License-Identifier: Apache-2.0
|
#-----------------------------------------------------------------------------
|
|
# The win32.client.gencache code must be allowed to create the cache in %temp% (user's temp). It is necessary to get the
|
# gencache code to use a suitable directory other than the default in lib\site-packages\win32com\client\gen_py.
|
# PyInstaller does not provide this directory structure and the frozen executable could be placed in a non-writable
|
# directory like 'C:\Program Files. That's the reason for %temp% directory.
|
#
|
# http://www.py2exe.org/index.cgi/UsingEnsureDispatch
|
|
import atexit
|
import os
|
import shutil
|
import tempfile
|
|
# Put gen_py cache in temp directory.
|
supportdir = tempfile.mkdtemp()
|
# gen_py has to be put into directory 'gen_py'.
|
genpydir = os.path.join(supportdir, 'gen_py')
|
|
# Create 'gen_py' directory. This directory does not need to contain '__init__.py' file.
|
try:
|
# win32com gencache cannot be put directly to 'supportdir' with any random name. It has to be put in a directory
|
# called 'gen_py'. This is the reason why to create this directory in supportdir'.
|
os.makedirs(genpydir)
|
# Remove temp directory at application exit and ignore any errors.
|
atexit.register(shutil.rmtree, supportdir, ignore_errors=True)
|
except OSError:
|
pass
|
|
# Override the default path to gen_py cache.
|
import win32com # noqa: E402
|
|
win32com.__gen_path__ = genpydir
|
|
# The attribute __loader__ makes module 'pkg_resources' working but On Windows it breaks pywin32 (win32com) and test
|
# 'basic/test_pyttsx' will fail. Just removing that attribute for win32com fixes that and gencache is created properly.
|
if hasattr(win32com, '__loader__'):
|
del win32com.__loader__
|
|
# Ensure genpydir is in 'gen_py' module paths.
|
import win32com.gen_py # noqa: E402
|
|
win32com.gen_py.__path__.insert(0, genpydir)
|