Skip to content

modified dynamic module globals get overriden at load time #199

@pierreglaser

Description

@pierreglaser

Hi all,
While introspecting test_dynamic_module for #192, I wrote a script that

  • dumps a dynamic module,
  • changes a global variable inside
  • finally re-load the dumped module.
import imp
import cloudpickle
import textwrap
import sys
import pickle

mod = imp.new_module('mod')
code = '''
x = 1
'''
exec(textwrap.dedent(code), mod.__dict__)

# first, dump the module
fileobj = cloudpickle.dumps(mod)

# change the mod's global variable x
mod.x = 2

# create child-process-like process environnement where
# mod is already loaded with the modified variable x
sys.modules['mod'] = mod

# finally, re-load the dynamic module
mod2 = pickle.loads(fileobj)

# this fails for now
assert mod2.x == mod.x

The modified global variable gets overriden. I wonder if this is global behavior, or it needs to be changed.

Using Python 3.7.0, cloudpickle==0.5.5

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions