Setuptools如何只打包一些模块和文件

Setuptools how to package just some modules and files

我打包了一个小 python 包。我是python打包的新手,我的目录结构如下(最多二级嵌套):

.
├── data
│   ├── images
│   ├── patches
│   └── train.csv
├── docker
│   ├── check_gpu.py
│   ├── Dockerfile.gcloud_base
│   ├── Dockerfile.gcloud_myproject
├── env.sh
├── gcloud_config_p100.yml
├── legacy
│   ├── __init__.py
│   ├── notebooks
│   └── mypackage
├── notebooks
│   ├── EDA.ipynb
│   ├── Inspect_patches.ipynb
├── README.md
├── requirements.txt
├── scripts
│   ├── create_patches_folds.py
│   └── create_patches.py
├── setup.py
├── mypackage
    ├── data
    ├── img
    ├── __init__.py
    ├── jupyter
    ├── keras_utils
    ├── models
    ├── train.py
    └── util.py

我的setup.py:

import os
from setuptools import setup, find_packages

REQUIRED_PACKAGES = [
    "h5py==2.9.0",
    "numpy==1.16.4",
    "opencv-python==4.1.0.25",
    "pandas==0.24.2",
    "keras==2.2.4",
    "albumentations==0.3.1"
]

setup(
    name='mypackage',
    version='0.1',
    install_requires=REQUIRED_PACKAGES,
    packages=find_packages(include=["mypackage.*"]),
    include_package_data=False
)

我要打包的代码只对应mypackage目录。这就是为什么我将 "mypackage.*" 传递给 find_packages 并使用 include_package_data=False。

如果我运行:

python setup.py sdist

所有项目结构都打包在生成的 tar.gz 文件中。

有人知道如何将模块打包到 mypackage/ 和顶级 README 文件中吗?我没有在 setuptools 文档中找到它。

首先要修复的是

packages=find_packages(include=["mypackage"]),

但您还需要了解 sdist 主要由文件 MANIFEST or its template MANIFEST.in 而不是 setup.py 控制。您可以比较使用 sdistbdist_wheelbdist_egg 创建的内容; bdist_* 的内容由 setup.py.

控制

所以我的建议是创建以下 MANIFEST.in:

prune *
include README.txt
recursive-include mypackage *.py