使用 setup.py 自定义 python 包目录布局

Tyr*_*ick 6 distutils setuptools setup.py python-packaging

假设我有以下目录结构:

\n\n
src/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 python/\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 generated/\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.py\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib/\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 b.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的是什么setup.py为了创建目录布局如下的 dist,

\n\n
src/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 python/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib/\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 b.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

目标是简单地消除该generated文件夹。我尝试了无数的变化,package_dir但除了原始目录结构之外,无法生成任何内容。

\n

sin*_*roc 6

在这种特定情况下,对于这个特定的项目目录结构,setup.py脚本应放置在该src目录中,并且应如下所示:

#!/usr/bin/env python
    
import setuptools
    
setuptools.setup(
    name='Thing',
    version='1.2.3',
    packages=[
        'python',
        'python.lib',
    ],
    package_dir={
        'python': 'python/generated',
    },
)
Run Code Online (Sandbox Code Playgroud)

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