35 lines
1.6 KiB
Python
35 lines
1.6 KiB
Python
|
# Imported by pywin32.pth to bootstrap the pywin32 environment in "portable"
|
||
|
# environments or any other case where the post-install script isn't run.
|
||
|
#
|
||
|
# In short, there's a directory installed by pywin32 named 'pywin32_system32'
|
||
|
# with some important DLLs which need to be found by Python when some pywin32
|
||
|
# modules are imported.
|
||
|
# If Python has `os.add_dll_directory()`, we need to call it with this path.
|
||
|
# Otherwise, we add this path to PATH.
|
||
|
import os
|
||
|
import site
|
||
|
|
||
|
# The directory should be installed under site-packages.
|
||
|
|
||
|
dirname = os.path.dirname
|
||
|
# This is to get the "...\Lib\site-packages" directory
|
||
|
# out of this file name: "...\Lib\site-packages\win32\Lib\pywin32_bootstrap.py".
|
||
|
# It needs to be searched when installed in virtual environments.
|
||
|
level3_up_dir = dirname(dirname(dirname(__file__)))
|
||
|
|
||
|
site_packages_dirs = getattr(site, "getsitepackages", lambda: [])()
|
||
|
if level3_up_dir not in site_packages_dirs:
|
||
|
site_packages_dirs.insert(0, level3_up_dir)
|
||
|
|
||
|
for site_packages_dir in site_packages_dirs:
|
||
|
pywin32_system32 = os.path.join(site_packages_dir, "pywin32_system32")
|
||
|
if os.path.isdir(pywin32_system32):
|
||
|
if hasattr(os, "add_dll_directory"):
|
||
|
os.add_dll_directory(pywin32_system32)
|
||
|
# This is to ensure the pywin32 path is in the beginning to find the
|
||
|
# pywin32 DLLs first and prevent other PATH entries to shadow them
|
||
|
elif not os.environ["PATH"].startswith(pywin32_system32):
|
||
|
os.environ["PATH"] = os.environ["PATH"].replace(os.pathsep + pywin32_system32, "")
|
||
|
os.environ["PATH"] = pywin32_system32 + os.pathsep + os.environ["PATH"]
|
||
|
break
|