我正在包装一个小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 /和顶级自述文件中吗?我在setuptools文档中找不到此内容。
答案 0 :(得分:1)
首先要解决的是
packages=find_packages(include=["mypackage"]),
但是您还需要了解sdist
主要由文件MANIFEST
or its template MANIFEST.in
控制,而不是setup.py
控制。您可以比较使用sdist
和bdist_wheel
或bdist_egg
创建的内容; bdist_*
的内容由setup.py
控制。
所以我的建议是创建以下MANIFEST.in
:
prune *
include README.txt
recursive-include mypackage *.py