> Here is my real problem. I used to just pass a regular dictionary to > code.InteractiveInterpreter, which worked well enough. But I just > discovered an issue with pickling in the PyCrust shell, illustrated > below: > > Welcome To PyCrust 0.8 - The Flakiest Python Shell > Sponsored by Orbtech - Your source for Python programming expertise. > Python 2.2.2 (#1, Oct 28 2002, 17:22:19) > [GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)] on linux2 > Type "help", "copyright", "credits" or "license" for more information. > >>> import pickle > >>> def foo(): > ... pass > ... > >>> pickle.dumps(foo) > Traceback (most recent call last): > File "<input>", line 1, in ? > File "/usr/local/lib/python2.2/pickle.py", line 978, in dumps > Pickler(file, bin).dump(object) > File "/usr/local/lib/python2.2/pickle.py", line 115, in dump > self.save(object) > File "/usr/local/lib/python2.2/pickle.py", line 225, in save > f(self, object) > File "/usr/local/lib/python2.2/pickle.py", line 519, in save_global > raise PicklingError( > PicklingError: Can't pickle <function foo at 0x8654b9c>: it's not found > as __main__.foo > >>> > > So I decided to switch to using sys.modules['__main__'].__dict__, which > eliminated the pickling error, but introduced a bunch of clutter in the > local namespace. Any suggestions? Remove the clutter. This probably means having a very minimal "real" main program. IDLE does this by putting all the real code in the "run" module, and bootstrapping the subprocess as follows: python -c "__import__('run').main()" This is roughly equivalent to executing import run run.main() except that it doesn't create a variable 'run'. --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4