Python之算法打包 后通过pip 安装调用
-
一个可 pip 安装的包,本质上是一个包含了一些特定文件和目录结构的压缩包(.tar.gz 或 .whl)。pip 会从 PyPI(Python Package Index)或其他源找到这个压缩包,下载并安装它。
-
你的任务就是创建这个结构正确的“压缩包”。
第一步:项目结构标准化
首先,将你的代码组织成标准的结构。假设你的项目名叫 mybag,一个推荐的结构如下:
mybag-project/ # 项目根目录(你可以任意命名,但这不重要)
├── src/ # src目录是标准做法,用于存放包源码
│ └── mybag/ # 这个目录名必须和你的包名一致(即将被pip安装的)
│ ├── __init__.py # 这是一个空文件,告诉Python这是一个包
│ ├── main_module.py # 你的主模块代码
│ └── ... # 其他模块、子包等
├── tests/ # 你的测试文件(可选但推荐)
├── docs/ # 你的文档(可选)
├── requirements.txt # 项目依赖列表
├── pyproject.toml # 【现代方式】最重要的文件,构建系统的配置
└── README.md # 项目说明
关键点:
-
src 布局: 使用 src 目录是一种最佳实践,它可以避免很多在测试和开发时遇到的导入路径问题。
-
包目录: src/mybag/ 这个目录的名字 mybag 才是用户 import mybag 时真正的包名。
-
__init__.py: 必须存在,可以是空的,也可以在里面写一些初始化代码或定义__version__。
现在你需要做的是:
将你的主要源码(封装好的接口等)移动到 src/mybag/ 目录下。你的虚拟环境 不需要 被打包进去。
第二步:创建 pyproject.toml 文件(核心!)
-
这是现代 Python 打包的配置文件,它取代了旧的 setup.py 和 setup.cfg。在项目根目录创建这个文件。
-
一个最基础的 pyproject.toml 示例:
[build-system]
requires = ["setuptools>=61.0.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "mybag"
version = "0.1.0" # 遵循语义化版本号,如 1.0.0, 1.0.1, 1.1.0
description = "A fantastic image matching library"
readme = "README.md"
requires-python = ">=3.8" # 指定你的代码支持的Python版本
license = { file = "LICENSE" } # 确保你有一个许可证文件
authors = [
{ name="Your Name", email="your.email@example.com" },
]
keywords = ["image", "matching", "computer-vision"]
classifiers = [
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
]
dependencies = [
"opencv-python>=4.5.0",
"numpy>=1.21.0",
"torch>=1.9.0",
# 将你虚拟环境中的依赖(pip list)全部写在这里!
# 不要直接复制requirements.txt,要手动列在这里。
]
[project.urls]
Homepage = "https://github.com/yourusername/mybag"
[tool.setuptools]
package-dir = { "" = "src" } # 告诉setuptools包在src目录下
关键点:
-
dependencies: 这是最重要的部分!你需要将你虚拟环境里所有的核心依赖(通过 pip list 查看)都列在这里。当用户 pip install mybag 时,这些依赖会被自动安装。
注意: 只添加项目运行所必须的依赖,开发工具(如 black, pytest)不要写在这里。 -
requires-python: 务必设置正确。
-
package-dir: 因为我们使用了 src 布局,所以需要这行配置来指明包的位置。
(传统方式:setup.py)
虽然现在推荐使用 pyproject.toml,但了解 setup.py 也有帮助。如果你看到旧教程,它们会用这个。现代工具如 build 和 pip 都能理解 pyproject.toml。
第三步:编写必要的辅助文件
-
README.md: 用 Markdown 编写项目的详细说明,包括功能、安装方法、快速使用示例等。
-
LICENSE: 选择一个开源许可证(如 MIT, Apache等),将许可证文本复制到一个名为 LICENSE 的文件中。如果不加许可证,默认情况下他人无权使用你的代码。
第四步:构建分发包
-
在项目根目录下,打开终端/命令行。
-
安装最新版的构建工具:
pip install --upgrade build
- 执行构建命令:
python -m build
这个命令会读取你的 pyproject.toml,并在项目根目录下创建一个 dist/ 文件夹,里面包含两个文件:
mybag-0.1.0.tar.gz (源码归档)
mybag-0.1.0-py3-none-any.whl (编译好的发行版 wheel 文件)
第五步:分发和安装
- 现在你有两种方式让别人安装你的包:
方法A:直接从本地文件安装(用于测试或私下分享)
你可以将整个项目文件夹(或者直接只是 dist 文件夹)发给别人,他们可以这样安装:
pip install /path/to/dist/mybag-0.1.0-py3-none-any.whl
# 或者
pip install /path/to/dist/mybag-0.1.0.tar.gz
在正式分享前,务必用这种方式先测试安装一次,确保一切正常!
方法B:上传到 PyPI(用于公开分享)
这样全世界的人都可以通过 pip install mybag 来安装。
1.注册 PyPI 账号:
-
测试平台: https://test.pypi.org/
-
正式平台: https://pypi.org/
2.安装上传工具:
pip install --upgrade twine
3.上传到测试平台(强烈建议先测试):
python -m twine upload --repository testpypi dist/*
你会被要求输入在 testpypi.org 注册的用户名和密码。
4.从测试平台安装测试:
pip install --index-url https://test.pypi.org/simple/ --no-deps mybag
5.测试成功后,上传到正式的 PyPI:
python -m twine upload dist/*
6.现在,任何人都可以安装了:
pip install mybag
1649

被折叠的 条评论
为什么被折叠?



