python模块打包规范
发布于 2025 年 2 月 18 日,更新于 2025 年 2 月 20 日

目录结构 src-layout

project_root_directory
├── pyproject.toml  # AND/OR setup.cfg, setup.py
├── ...
└── src/
    └── mypkg/
        ├── __init__.py
        ├── ...
        ├── module.py
        ├── subpkg1/
        │   ├── __init__.py
        │   ├── ...
        │   └── module1.py
        └── subpkg2/
            ├── __init__.py
            ├── ...
            └── module2.py

配置关键字

添加资源文件

[tool.setuptools.packages.find]
where = ["src"]
 
[tool.setuptools.package-data]
mypkg = ["*.txt", "*.rst"]
"mypkg.data" = ["*.rst"]
 
[tool.setuptools.exclude-package-data]
mypkg = [".gitattributes"]

访问静态资源

import os
# pypkg/data/data1.txt
data_path = os.path.join(os.path.dirname(__file__), 'data', 'data1.txt')

示例

[build-system]
requires = ["setuptools", "setuptools-scm"]
build-backend = "setuptools.build_meta"
 
[project]
name = "my_package"
version = "0.0.1"
authors = [
    {name = "Josiah Carberry", email = "josiah_carberry@brown.edu"},
]
description = "My package description"
readme = "README.rst"
requires-python = ">=3.7"
keywords = ["one", "two"]
license = {text = "BSD-3-Clause"}
classifiers = [
    "Framework :: Django",
    "Programming Language :: Python :: 3",
]
dependencies = [
    "requests",
    'importlib-metadata; python_version<"3.8"',
]
dynamic = ["version"]
 
[project.optional-dependencies]
pdf = ["ReportLab>=1.2", "RXP"]
rest = ["docutils>=0.3", "pack ==1.1, ==1.3"]
 
# 命令行工具
[project.scripts]
my-script = "my_package.module:function"
 
[tool.setuptools.packages.find]
where = ["src"]
 
[tool.setuptools.package-data]
mypkg = ["*.txt", "*.rst"]
"mypkg.data" = ["*.rst"]
 
[tool.setuptools.exclude-package-data]
mypkg = [".gitattributes"]
 
# ... other project metadata fields as specified in:
#     https://packaging.python.org/en/latest/specifications/declaring-project-metadata/
src
├── novelSpider
│   ├── __init__.py
│   ├── run.py
│   ├── spider.py
│   └── static
│       ├── decrypt.js
│       └── style1.css

PKGBUILD

https://wiki.archlinux.org/title/Python_package_guidelines

setup.py

from setuptools import setup
 
setup(
    name='name',
    version='0.0.1',
    install_requires=[
        "numpy"
    ],
    include_package_data=True
)
from setuptools import setup
 
setup()
# python-build
# python-installer
python -m build --wheel --no-isolation
python -m installer --destdir="$pkgdir" dist/*.whl
python模块打包规范
作者发布于许可
Connor2025 年 2 月 18 日CC BY-NC-SA 4.0
 2025 Connor. All Rights Reserved. / RSS
Powered by Astro & React