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

Mr.*_* B. 5 python pip setuptools

我的项目结构:

/myproject/       <- I would like to skip that folder
  /mypackage/
    /subpackage/
      mymodule.py
    run.py
- setup.py
Run Code Online (Sandbox Code Playgroud)

run.py我想从mymodule.py这样的地方导入:

from mypackage.subpackage.mymodule import something
Run Code Online (Sandbox Code Playgroud)

代替:

from myproject.mypackage.subpackage.mymodule import something
Run Code Online (Sandbox Code Playgroud)

有没有办法将setup()入口点定义为beingmypackage并skip myproject

Igu*_*aut 5

您可以使用所谓的 src-layout (因为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
Run Code Online (Sandbox Code Playgroud)

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

from setuptools import find_packages
setup(
...
    package_dir={'': 'src'}
    packages=find_packages(where='src')
...
)
Run Code Online (Sandbox Code Playgroud)