使用 setuptools 的 python 替代包设置

问题描述

我在使用我的特定设置添加包时遇到了一些问题:

.
├── pkg_a
│   ├── pkg_a
│   │   ├── __init__.py
│   │   └── module_a.py
│   └── run_a.py
├── pkg_b
│   ├── pkg_b
│   │   ├── __init__.py
│   │   └── module_b.py
│   └── run_b.py
└── setup.py

我的目标是能够在不重复包名两次的情况下导入包模块。
例如,在 run_a.py 中,我希望能够调用 from pkg_a import module_a 而不是调用 from pkg_a.pkg_a import module_a

我尝试遵循文档 here 的第 2.1 节。通过创建 setup.py 如下:

from setuptools import setup

setup(
    name="test",packages=['pkg_a','pkg_b'],package_dir={'pkg_a':'pkg_a/pkg_a','pkg_b':'pkg_b/pkg_b'}
)

但这并没有达到上面提到的预期效果,因为我试图调用 python setup.py develop 然后 python -c 'from pkg_a import module_a'
这个特殊的设置可以实现吗?我在这里搞砸了什么?谢谢大家!

解决方法

package_dir 修改不适用于 editable(又名 develop)安装。 editable 安装唯一可接受的 package_dir 修改是涵盖所谓的 src-layout

    package_dir={'': 'src'},