setup.py - 如何设置一个子文件夹为主包目录?

setup.py - how to set a sub-folder as the main package directory?

我的项目结构:

/myproject/       <- I would like to skip that folder
  /mypackage/
    /subpackage/
      mymodule.py
    run.py
- setup.py

run.py 内,我想像这样从 mymodule.py 导入:

from mypackage.subpackage.mymodule import something

而不是:

from myproject.mypackage.subpackage.mymodule import something

setup() 中有没有办法将入口点定义为 mypackage 并跳过 myproject

您可以使用所谓的 src 布局(因为 src/ 通常用作包的顶级目录。参见 https://setuptools.readthedocs.io/en/latest/setuptools.html#using-a-src-layout

如果使用 setup.cfg 你可以这样写:

[options]
package_dir=
    =src
packages=find:

[options.packages.find]
where=src

或等效地,使用旧式 setup.py:

from setuptools import find_packages
setup(
...
    package_dir={'': 'src'}
    packages=find_packages(where='src')
...
)