mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-04 21:54:27 +08:00
77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
"""
|
|
$Id$
|
|
|
|
Original author: Thorsten Henninger <henni@brainbot.com>
|
|
Info about this file: http://mail.python.org/pipermail/python-win32/2003-December/001453.html
|
|
|
|
Use this in confuction with McMillan-Installer, if you need COM-Support in your application.
|
|
McMillan Installer as well as PythonCOM do overwrite the import Method for their needs.
|
|
|
|
_myimport advises the imports to either PythonCOM-Import or McMillan Import.
|
|
|
|
set_gen_path: use this method to specify the gencache-path, where all Python-COMObjects will be
|
|
automatically generated in.
|
|
|
|
One needs to Patch the McMillan Installer such that the Python-nativ import has to be saved as
|
|
__oldimport__
|
|
|
|
Use this hack in your application with
|
|
|
|
import comhack
|
|
set_gen_path(mypath)
|
|
|
|
Then everything will work ...
|
|
"""
|
|
|
|
import sys
|
|
import __builtin__
|
|
|
|
#save the import-Method (either McMillan's import or Python's)
|
|
mcimport = __builtin__.__import__
|
|
|
|
def _myimport(name, globals=None, locals=None, fromlist=None):
|
|
"""
|
|
Tell all modules to imported by McMillan's (or Python's) import.method,
|
|
besides win32com modules automatically genrated by win32com.gencache
|
|
"""
|
|
try:
|
|
#fails with ImportError, if McMillan has overwritten Python's native import
|
|
#and win32com.gen_py tries to generate a module
|
|
return mcimport(name, globals, locals, fromlist)
|
|
except ImportError, err:
|
|
if name.startswith('win32com.gen_py'):
|
|
#this is the Python-Native Import Method, if a patched McMillan-Installer exists
|
|
return __oldimport__(name, globals, locals, fromlist)
|
|
else:
|
|
#win32com needs this ImportError
|
|
raise err
|
|
|
|
|
|
def set_gen_path(path):
|
|
"""
|
|
Set the gencache Path
|
|
If not set, all Modules (win32com) will be generated to support/gen_py of your apllication.
|
|
"""
|
|
import os
|
|
|
|
import win32com
|
|
import win32com.gen_py
|
|
|
|
path = os.path.abspath(path)
|
|
|
|
if not os.path.exists(path):
|
|
os.makedirs(path)
|
|
|
|
#check, if McMillan runs ...
|
|
frozen = sys.__dict__.get("frozen", 0)
|
|
|
|
#set the gencache path
|
|
win32com.gen_py.__path__ = [path]
|
|
win32com.__gen_path__ = path
|
|
|
|
if not frozen:
|
|
return
|
|
|
|
#setup our import method, if McMillan runs.
|
|
__builtin__.__import__ = _myimport
|