55 lines
1.8 KiB
Plaintext
55 lines
1.8 KiB
Plaintext
From: bend at realeducation.com (Benjamin Derstine)
|
|
Date: Thu, 20 May 1999 08:48:59 -0600
|
|
Subject: pickle and module package
|
|
References: <s74018da.014@mail.conservation.state.mo.us>
|
|
Message-ID: <7i174k$75c$1@ash.prod.itd.earthlink.net>
|
|
Content-Length: 1546
|
|
X-UID: 1848
|
|
|
|
Jeffrey Kunce wrote in message ...
|
|
Python is very flexible about importing modules from
|
|
different locations. For example:
|
|
|
|
try: from MyPackage.MySubPackage import MyModule
|
|
except ImportError: import MyModule
|
|
MyInstance = MyModule.MyClass()
|
|
...
|
|
|
|
will first try to import MyModule from a specific package. If
|
|
that fails, python will attempt to import MyModule from anywhere
|
|
on thes pythonpath. Regardless of where MyModule comes
|
|
from, MyInstance will behave the same for any following code.
|
|
|
|
*Except* for the pickle module. pickle (and cPickle) store each
|
|
class instance with the full package-class-name. As far as pickle is
|
|
concerned:
|
|
MyPackage.MySubPackage.MyModule.MyClass
|
|
and
|
|
MyModule.MyClass
|
|
are completely different animals. When you unpickle
|
|
these instances, you are required to have imported the
|
|
modules from the same location as when you pickled them.
|
|
|
|
Is this a problem for anyone besides me? Does anyone have
|
|
an easy workaround? Thanks.
|
|
|
|
--Jeff
|
|
|
|
I've been running into this problem while using Zope. I wanted to run
|
|
Python code through Zope that unpickled some classes. For the sake of Zope
|
|
the modules have to be contained in packages. When I would run the code
|
|
from the Python interpreter without the packaged version of the code it
|
|
worked fine. Then when I would try to run it from Zope everything worked
|
|
fine until it got to my unpickle statement. I had no idea what was going on
|
|
until I saw your post. I have no idea how to get around this except to
|
|
pickle and unpickle in the same place.
|
|
|
|
Ben
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|