pydeps icon indicating copy to clipboard operation
pydeps copied to clipboard

pydeps randomly generates compiled pyc files when examine python source file

Open ZiqianXu opened this issue 10 months ago • 4 comments

Hi pydeps team, thanks for implementing this great tool!

When using the tool to examine python source files, we noticed sometimes a compiled pyc file would be automatically generated for the all python files inside the same directory. For example pyyaml.

yaml $ ls -la __pycache__/
ls: cannot access '__pycache__/': No such file or directory
yaml $ pydeps dumper.py -vvvvvvvv --show-deps --no-output --noshow --include-missing
run_script 'dumper.py' 
    load_module(PY_SOURCE) fqname=__main__, fp=fp, pathname=dumper.py 
    import_hook: name(emitter) caller(Module(name=__main__, file='dumper.py', path=None)) fromlist(None) level(1) 
        determine_parent Module(name=__main__, file='dumper.py', path=None) 1 
        ImportError: 'relative importpath too deep' 
        import_hook: name(serializer) caller(Module(name=__main__, file='dumper.py', path=None)) fromlist(None) level(1) 
            determine_parent Module(name=__main__, file='dumper.py', path=None) 1 
            ImportError: 'relative importpath too deep' 
            import_hook: name(representer) caller(Module(name=__main__, file='dumper.py', path=None)) fromlist(None) level(1) 
                determine_parent Module(name=__main__, file='dumper.py', path=None) 1 
                ImportError: 'relative importpath too deep' 
                import_hook: name(resolver) caller(Module(name=__main__, file='dumper.py', path=None)) fromlist(None) level(1) 
                    determine_parent Module(name=__main__, file='dumper.py', path=None) 1 
                    ImportError: 'relative importpath too deep' 
                load_module -> Module(name=__main__, file='dumper.py', path=None) 
{
    "dumper.py": {
        "bacon": 0,
        "imports": [
            "emitter",
            "representer",
            "resolver",
            "serializer"
        ],
        "name": "dumper.py",
        "path": null
    },
    ...
}
yaml $ ls -la __pycache__/
total 172
drwxr-xr-x. 1 ziqian ziqian   752 May  3 07:07 .
drwxr-xr-x. 1 ziqian ziqian   372 May  3 07:07 ..
-rw-r--r--. 1 ziqian ziqian  3562 May  3 07:07 composer.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian 20821 May  3 07:07 constructor.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  3410 May  3 07:07 cyaml.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  1822 May  3 07:07 dumper.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian 25352 May  3 07:07 emitter.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  2299 May  3 07:07 error.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  3973 May  3 07:07 events.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian 11844 May  3 07:07 __init__.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  2163 May  3 07:07 loader.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  1724 May  3 07:07 nodes.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian 11923 May  3 07:07 parser.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  4536 May  3 07:07 reader.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian 10068 May  3 07:07 representer.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  5497 May  3 07:07 resolver.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian 25268 May  3 07:07 scanner.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  3319 May  3 07:07 serializer.cpython-38.pyc
-rw-r--r--. 1 ziqian ziqian  4934 May  3 07:07 tokens.cpython-38.pyc

python version is 3.8 and pydeps version is v1.12.20.

Is this expected behavior due to checking import-opcodes in python bytecodes for imports? But it does not happen for all python source file directory, so far we only find pyyaml filepath having the issue. What's the reason for that? Cam we disable the auto-generation of compiled python file?

Thanks for looking into this!

ZiqianXu avatar May 03 '24 07:05 ZiqianXu