首页 > 解决方案 > 使用 setup.py 自定义 python 包目录布局

问题描述

假设我有以下目录结构:

src/
└── python/
    └── generated/
        ├── __init__.py
        ├── a.py
        └── lib/
            ├── __init__.py
            └── b.py

setup.py为了创建具有如下目录布局的 dist,我需要什么样的外观:

src/
└── python/
    ├── __init__.py
    ├── a.py
    └── lib/
        ├── __init__.py
        └── b.py

目标是简单地消除generated文件夹。我已经尝试了无尽的变化,package_dir除了原始目录结构之外,什么也没有产生。

标签: setuptoolssetup.pydistutilspython-packaging

解决方案


setup.py应该放在你的src目录中,看起来应该是这样的:

#!/usr/bin/env python3

import setuptools

setuptools.setup(
    name='Thing',
    version='1.2.3',
    packages=[
        'python',
        'python.lib',
    ],
    package_dir={
        'python': 'python/generated',
    },
)

注意package_dir设置。它指示从目录setuptools中获取包的代码。在构建的发行版中,您将找到正确的目录结构。pythonpython/generated


推荐阅读