Skip to content

Namespace packages #22

@smurfix

Description

@smurfix

I'm trying to use findimports with namespace packages (i.e. those which don't have an __init__ in their directory tree) and I'm running into some issues.

First, the directory structure:

$ tree
.
├── Makefile
├── moat
│   └── main
│       └── __init__.py
├── README.md
├── setup.cfg
└── setup.py

There's a ../util directory alongside this one which has much the same structure:

 tree ../util
../util
├── Makefile
├── moat
│   └── util
│       ├── __init__.py
│       ├── times.py
│       └── _yaml.py
├── README.rst
├── setup.cfg
└── setup.py

OK. So when I run findimports on this, I get

$ PYTHONPATH=.:../util/ findimports --ignore-stdlib 
main.__init__:
  anyio
  asyncclick
  util
setup:
  setuptools

Now this is obviously suboptimal, as there's no "util" package and the toplevel isn't "main" either. I have to do

  • touch moat.__init__.py
  • touch ../util/moat/__init__.py

to get a more reasonable output of

moat.__init__:
  
moat.main.__init__:
  anyio
  asyncclick
  moat.util
setup:
  setuptools

To fix the requirement for the first touch statement I would like an option that tells findimports that it should assume that every dictionary it finds (or that's named on the command line) might be the root of a namespace package. This way the src/whatever style of laying out your source repository would still work unchanged.

Imported modules should be recognized no matter whether they're part of a namespace, i.e. the second touch should not be necessary even if I don't use that special new option.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions