Using PythonCall, suppose I would like to import a Python module foo
and its sub-module bar
, where bar
defines baz
, I would expect the following to work but it does not:
using PythonCall
foo = pyimport("foo")
foo.bar.baz
foo.bar
is a Python module (a Py
object), but it does not have baz
defined - it doesn't seem to have any names defined.
Current workaround seems to be something like:
using PythonCall
foo = pyimport("foo")
foo_bar = pyimport("foo.bar")
foo_bar.baz
julia> using PythonCall
julia> fo = pyimport("fiftyone")
Python module: <module 'fiftyone' from '/Users/jsa/work/julia/FiftyOne.jl/.CondaPkg/env/lib/python3.11/site-packages/fiftyone/__init__.py'>
julia> fo.core
Python module: <module 'fiftyone.core' from '/Users/jsa/work/julia/FiftyOne.jl/.CondaPkg/env/lib/python3.11/site-packages/fiftyone/core/__init__.py'>
julia> fo.core.
No names defined in fo.core
, i.e. no completions available in the REPL.
Whereas all the names are defined if importing fiftyone.core
separately:
julia> fo_core = pyimport("fiftyone.core")
Python module: <module 'fiftyone.core' from '/Users/jsa/work/julia/FiftyOne.jl/.CondaPkg/env/lib/python3.11/site-packages/fiftyone/core/__init__.py'>
julia> fo_core
Python module: <module 'fiftyone.core' from '/Users/jsa/work/julia/FiftyOne.jl/.CondaPkg/env/lib/python3.11/site-packages/fiftyone/core/__init__.py'>
julia> fo_core.
__annotations__ __cached__ __class__ __delattr__ __dict__ __dir__ __doc__ __eq__ __file__ __format__
__ge__ __getattribute__ __getstate__ __gt__ __hash__ __init__ __init_subclass__ __le__ __loader__ __lt__
__name__ __ne__ __new__ __package__ __path__ __reduce__ __reduce_ex__ __repr__ __setattr__ __sizeof__
__spec__ __str__ __subclasshook__ aggregations annotation brain clips collections config context
dataset document evaluation expressions fields frame frame_utils groups json labels
logging media metadata models odm patches plots runs sample service
session singletons spaces stages state uid utils validation video view
Last updated: Oct 02 2023 at 04:34 UTC