Skip to content

__name__ being lost inside cloudpickled staticmethods? (0.8.0 regression) #251

Description

@tjb900

Not sure if this is expected or not? Reproducer below.

Thanks!
Tim


Output with cloudpickle 0.7.0:

(cp7) $ python reproducer.py                                                                                                                                   
<pkg.mymod2.MyClass object at 0x7fbf18b3d828>

cloudpickle 0.8.0:

(cp8) $ python reproducer.py                                                                                                                                   
Traceback (most recent call last):
  File "reproducer.py", line 7, in <module>
    print(f())
  File "/mypath/pkg/mymod.py", line 4, in func
    from .mymod2 import MyClass
KeyError: "'__name__' not in globals"
pkg/
   __init__.py
   mymod.py
   mymod2.py
reproducer.py
# pkg/__init__.py
# blank
# pkg/mymod.py
class Blah(object):
    @staticmethod
    def func():
        from .mymod2 import MyClass
        return MyClass()
# pkg/mymod2.py
class MyClass(object):
    pass
# reproducer.py
from pkg.mymod import Blah
from cloudpickle import dumps
from pickle import loads

f = loads(dumps(Blah.func))

print(f())

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions