A
Alan Meyer
I had an unusual problem tonight running makepy to install some
Microsoft COM interfaces in a Python 2.5 Windows XP installation
created using the ActiveState installer.
In earlier versions of Python, the files were generated to:
\PythonXX\Lib\site-packages\win32com\gen_py
But in my 2.5 installation they were generated to my temp
directory, in my case this was:
c:\temp\gen_py\2.5
I hadn't paid attention to the messages and when I cleared my
temp directory, which I occasionally do, the COM interfaces
stopped working.
Tracing through the makepy code, I found the following
(reformatted for email) in
\Python25\Lib\site-packages\win32com\__init__.py
if not __gen_path__:
try:
import win32com.gen_py
__gen_path__ = sys.modules["win32com.gen_py"].__path__[0]
except ImportError:
# If a win32com\gen_py directory already exists, then we use it
# (gencache doesn't insist it have an __init__, but our
# __import__ above does!
__gen_path__ = \
os.path.abspath(os.path.join(__path__[0], "gen_py"))
if not os.path.isdir(__gen_path__):
# We used to dynamically create a directory under win32com -
# but this sucks. If the dir doesn't already exist, we we
# create a version specific directory under the user temp
# directory.
__gen_path__ = os.path.join(
win32api.GetTempPath(), "gen_py",
"%d.%d" % (sys.version_info[0],
sys.version_info[1]))
I was able to make everything work right by creating the gen_py
directory in the expected place and re-running makepy. But I'm
curious to know:
1. Why does it suck to create gen_py dynamically?
2. Why didn't I have a gen_py directory already? Did I somehow
destory it or is it not created by default?
3. Why is the temp directory the alternate choice for where to
put these?
Thanks.
Alan
Microsoft COM interfaces in a Python 2.5 Windows XP installation
created using the ActiveState installer.
In earlier versions of Python, the files were generated to:
\PythonXX\Lib\site-packages\win32com\gen_py
But in my 2.5 installation they were generated to my temp
directory, in my case this was:
c:\temp\gen_py\2.5
I hadn't paid attention to the messages and when I cleared my
temp directory, which I occasionally do, the COM interfaces
stopped working.
Tracing through the makepy code, I found the following
(reformatted for email) in
\Python25\Lib\site-packages\win32com\__init__.py
if not __gen_path__:
try:
import win32com.gen_py
__gen_path__ = sys.modules["win32com.gen_py"].__path__[0]
except ImportError:
# If a win32com\gen_py directory already exists, then we use it
# (gencache doesn't insist it have an __init__, but our
# __import__ above does!
__gen_path__ = \
os.path.abspath(os.path.join(__path__[0], "gen_py"))
if not os.path.isdir(__gen_path__):
# We used to dynamically create a directory under win32com -
# but this sucks. If the dir doesn't already exist, we we
# create a version specific directory under the user temp
# directory.
__gen_path__ = os.path.join(
win32api.GetTempPath(), "gen_py",
"%d.%d" % (sys.version_info[0],
sys.version_info[1]))
I was able to make everything work right by creating the gen_py
directory in the expected place and re-running makepy. But I'm
curious to know:
1. Why does it suck to create gen_py dynamically?
2. Why didn't I have a gen_py directory already? Did I somehow
destory it or is it not created by default?
3. Why is the temp directory the alternate choice for where to
put these?
Thanks.
Alan