FAQ
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

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedApr 9, '08 at 3:42a
activeApr 9, '08 at 3:42a
posts1
users1
websitepython.org

1 user in discussion

Alan Meyer: 1 post

People

Translate

site design / logo © 2022 Grokbase