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 -- http://mail.python.org/mailman/listinfo/python-list