Reputation: 1
I have my Python package structured in src-layout. I run multiple github repositories with each the same super-package-name, structured as follows:
package-subpackage1
├── .git/
├── src/
│ └── package/
│ └── subpackage1/
│ ├── __init__.py
│ └── code_subpackage1.py
└── pyproject.toml
package-subpackage2/
├── .git/
├── src/
│ └── package/
│ └── subpackage2/
│ ├── __init__.py
│ └── code_subpackage2.py
└── pyproject.toml
By setting the .toml in each repository to
[tool.setuptools.packages.find]
where = ["src"]
include = ["package.*"]
I can import the modules as
import package.subpackage1
import package.subpackage2
Now I would like to add a subsubpackage-Layer to subpackage1, like
package-subpackage1/
├── .git/
├── src/
│ └── package/
│ └── subpackage1/
│ ├── __init__.py
│ ├── code_subpackage1.py
│ └── subsubpackage1/
│ ├── __init__.py
│ └── code_subsubpackage1.py
└── pyproject.toml
which I would like to be able to call via
import package.subpackage1
subpackage1.subsubpackage1.SomeClass
When I try to access the subsubpackage1 via
import package.subpackage1 as pack
pack.subsubpackage1
I get
AttributeError: module 'package.subpackage1' has no attribute 'subsubpackage1'
which is kind of expected, since I am breaking the vanilla src/-Layout and the automatic discovery seems to fail. However, if I manually import subsubpackage1
afterwards via
import package.subpackage1.subsubpackage1
all my classes in subsubpackage1.py
become "magically" available via
pack.subsubpackage1.SomeClass
I don’t seem to understand how it is possible that a manual import of the subsubpackage1
makes it available in the previously imported subpackage1
. Any idea why this is the case?
And if I want to design my pyproject.toml correctly, do I have to explicitly set tools.packages.packages and reassemble my files into this custom structure as suggested in here ? Or is there a more standardized way to include another subpackage layer into the src-Layout?
(Don’t be too hard on me pls, this if my first question ever on StackOverFlow :) )
Upvotes: 0
Views: 20