С setuptools вы можете сделать что-то вроде этого:
Project
├── setup.py
└── src
├── package_a
│ └── __init__.py
└── package_b
└── __init__.py
setup.py
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='Project',
version='0.0.7',
packages=[
'package_a',
'package_b',
'package_a.package_b',
],
package_dir={
'package_a': 'src/package_a',
'package_b': 'src/package_b',
'package_a.package_b': 'src/package_b',
},
)
Это эффективно установит две копии package_b
,один в качестве пакета верхнего уровня, а другой в качестве подпакета package_a
. Это может быть проблемой, так как, например, если у вас есть глобальные переменные в package_b
, тогда они не будут иметь того же значения, что и глобальная переменная в package_a.package_b
. Но это также может быть положительным побочным эффектом, в зависимости от вариантов использования.