一、Python 项目结构
我用的是pycharm,项目结构案例如下:
本文分别使用两种python 打包的方式,使用 setup.py 和 pyproject.toml
在使用前请将 pip 和 setuptools 更新到最新
pip install --upgrade setuptools
pip install --upgrade pip
hellow.py 中文件内容
def say_hello():
print("hello")
main.py 中的文件内容
from .hellow import say_hello
def main():
say_hello()
二、使用setup.py 打包
1. 编写setup.py 文档
import setuptools # noqa
setuptools.setup(
name="hello"
author="yangtze_lv",
version="1.0",
author_email="yangtze_lv@163.com",
packages=setuptools.find_packages(where="src", include="package*"),
python_requires=">=3.8",
install_requires=[
"setuptools==65.3.0",
"wheel==0.37.1",
"opencv-contrib-python==4.5.5.62",
"opencv-python==4.5.5.62",
"matplotlib==3.5.3",
"numpy==1.23.2",
"matplotlib==3.5.3"
],
entry_points={
'console_scripts': [
'apap = package.main:main',
]
}
)
- author 和 author_email 为作者信息
- packages 中where 指要打包的目标文件夹, include指要把该文件夹下的哪些包给打包
- install_requires 为 用到的模块
- python_requires 为 python 版本
- entry_points 在 后面 install 后会生成一个可运行的文件
其他参数可参考文档:Packaging and distributing projects — Python Packaging User Guide
2. 构建包
python setup.py sdist
可以指定打包的文件类型
python setup.py sdist --format=zip,tar
如果要打包为 whl 文件,需要 安装 wheel 库,命令行输入
在打包文件后会得到一个三个文件夹
egg-info 记录了一下源码包的相关信息
whl 解压后则是源码文件
- 包的安装
一种方式是将 dist 下的 二进制包解压后,里面会有 setup.py 文件,切换到解压后的目录命令行输入
pip install setup.py
第二种方式是通过 pip 直接安装
pip install dist/hello-1.0-py3-none-any.whl
二、使用 pyproject.toml
在使用此方式前需要更新 build
pip install --upgrade build
pyproject.toml 文件内容
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
#...
[project]
# ...
name = "apap"
version = "1.0"
requires-python = ">=3.8"
authors = [
{ email = "yangtze_lv@163.com" },
{ name = "Wenchao Lv" }
]
dependencies = [
"setuptools==65.3.0",
"wheel==0.37.1",
"opencv-contrib-python==4.5.5.62",
"opencv-python==4.5.5.62",
"matplotlib==3.5.3",
"numpy==1.23.2",
"matplotlib==3.5.3"
]
# ...
[tool.setuptools.packages.find]
where = ["src"]
include = ["apap"]
[project.scripts]
apap = "apap.main:main"
基本参数于setup 差不多,需要注意的是 author和 email 部分,详细参数见文档 pyproject.toml 案例
构建包
在构建前更新 build
pip install --upgrade build
命令行输入
python -m build
会自动识别当前项目下存在的 pyproject.toml 和 setup.py 文件,生成文件后的安装方式与setup 中的一致
当 setup.py 和 pyproject.toml 文件同时存在时,使用build的方式 pyproject 中的内容会被setup.py 中的覆盖,而使用第一种方式则相反,注意在build 的时候不要挂翻墙软件,会报错
在构建完后,在命令行直接输入 apap 会进入设定的函数中