Developer技术博客 DevEngineer:林建有

创建Python类库.whl文件


如果你想私有部署 pip 包,也就是说,不发布到 PyPI,而是自己内部使用,有几种方式可以实现。下面是常见的做法和适合的场景:


🧩 方法一:直接通过本地路径或文件安装(开发/测试最简单)

✅ 场景:自己或团队内本地使用

操作:

打包你的包:

python -m build

然后安装:

pip install dist/your_package_name-0.1.0-py3-none-any.whl

也可以不打包,直接安装源码目录:

pip install .

或:

pip install -e .   # 开发模式(修改源码立即生效)

🌐 方法二:通过私有 Git 仓库安装

✅ 场景:你在 GitHub / GitLab / 公司 Git 服务器有项目仓库

操作:

pip install git+https://your.git.server/youruser/yourrepo.git@main

如果项目结构不是标准结构,还可以加子目录:

pip install git+https://...git@main#egg=yourpkg&subdirectory=subdir

如果 Git 仓库是私有的,可以:

  • 用带 token 的 URL(不安全,但能用)
  • 配置 .netrcssh

📦 方法三:搭建私有 PyPI 服务器

✅ 场景:你有公司内部部署需求(最标准、可控)

选项 A:使用 pypiserver

简单搭建:

pip install pypiserver
mkdir -p ~/packages
pypi-server run -p 8080 ~/packages

上传你的包(.whl.tar.gz)到 ~/packages/

安装时:

pip install your-package --extra-index-url http://your-server:8080/simple

选项 B:更强的工具(支持权限控制)

这些适合企业级部署。


🔐 方法四:本地文件服务器或 Web 服务器作为 index

如果你只是想在局域网里分发,也可以把 .whl 文件放在某个目录或服务器上,并生成一个简单的 index 页面:

python -m http.server 8000

访问 http://localhost:8000/,然后:

pip install your-package --extra-index-url http://localhost:8000

必须在目录下有个简单的 simple/index.html 结构,或者你使用 --find-links

pip install --find-links=http://localhost:8000 your-package

📝 总结

方式 适合场景 安装方式 安全性/灵活性
本地安装 本地测试、开发 pip install ..whl 最简单
Git 安装 团队共享、CI/CD pip install git+... 安全性视 Git 认证
私有 PyPI 企业内部 --extra-index-url 标准、可控、推荐
文件服务器 快速共享 --find-links 快捷、不推荐长期使用

需要我帮你搭一个最小可运行的私有 pip 包部署例子吗?例如:git+本地仓库pypiserver 模拟部署。

你说的应该是:pyproject.tomlsetup.cfg 等打包配置文件是否需要手动编写,还是可以通过工具自动生成

答案是:


✅ 有工具可以帮助你自动生成 pyproject.toml(或旧版的 setup.py

以下是几种推荐工具:


🛠️ 方法一:使用 [hatch](现代推荐,官方支持)

安装:

pip install hatch

创建新项目:

hatch new myproject

这会自动生成:

myproject/
├── myproject/
│   └── __init__.py
├── tests/
│   └── __init__.py
├── pyproject.toml  ✅ ✅ ✅
└── README.md

pyproject.toml 结构清晰,支持 CLI 脚本声明,非常适合现代项目。


🛠️ 方法二:使用 [flit](适合纯 Python 包)

安装:

pip install flit

初始化:

flit init

它会问你一些问题,然后生成一个 pyproject.toml 文件,比如:

[project]
name = "your-package"
authors = [{name = "Your Name", email = "you@example.com"}]
version = "0.1.0"
description = ""
readme = "README.md"
requires-python = ">=3.8"
dependencies = []

[project.scripts]
your-command = "your_module:main"

然后你只需运行:

flit install

🛠️ 方法三:setuptools(手动多,但通用)

初始化项目:

pip install setuptools

你可以手动写 pyproject.toml 或使用模板生成器(如 cookiecutter)初始化项目。


✅ 总结

工具 是否生成 pyproject.toml 是否支持 CLI 安装 推荐指数
Hatch ✅ 是 ✅ 是 ⭐⭐⭐⭐⭐
Flit ✅ 是 ✅ 是 ⭐⭐⭐⭐
Setuptools ✅ 是(较繁琐) ✅ 是 ⭐⭐⭐

My python util collections

我的个人python工具集,模块构建流程:

项目结构

├── README.md
├── pyproject.toml
├── src
│   └── pyutils
│       ├── __init__.py
│       ├── base_sqlite_db.py
│       ├── my_log.py
│       ├── utils.py
│       └── zip.py
└── tests
    └── test.py

Module模块构建

  • 1、示例(使用 setuptools):

      #在pyproject.toml文件
    
      [build-system]
      requires = ["setuptools>=61.0"]
      build-backend = "setuptools.build_meta"
    
      [project]
      name = "your-package-name"
      version = "0.1.0"
      description = "简短描述"
      readme = "README.md"
      requires-python = ">=3.7"
      license = {text = "MIT"}
      authors = [
      {name = "你的名字", email = "你@邮箱.com"}
      ]
      dependencies = [
      "requests>=2.0",  # 依赖示例
      ]
    
      [project.urls]
      Homepage = "https://github.com/yourname/yourproject"
    
  • 2、构建包

    • 先安装打包工具(一次性操作):
        pip install build
      
    • 然后在项目根目录运行:
        python -m build
      
    • 会生成:
      dist/
      ├── your_package_name-0.1.0.tar.gz
      └── your_package_name-0.1.0-py3-none-any.whl
    

上传到 PyPI

安装上传工具:

pip install twine

注册并获取 PyPI 账号

上传:

twine upload dist/*

输入你的 PyPI 用户名和密码即可。

💡 最新版本twine可能是OIDC 的API token,在pypi的个人账号下创建 API token, 并在~/.pypirc本地保存配置,可以长期免输入token使用:

[distutils]
index-servers =
    pypi
[pypi]
  repository= https://upload.pypi.org/legacy/ #上传地址
  username = __token__ #验证类型
  password =  #输入你的token pypi-AgEIcHlwaS5.....

💡 建议先上传到测试环境 Test PyPI:

💡 Because TestPyPI has a separate database from the live PyPI, you’ll need a separate user account specifically for TestPyPI. Go to https://test.pypi.org/account/register/ to register your account.

twine upload --repository testpypi dist/*

在其他项目中安装

pip install your-package-name

或者从 Test PyPI:

pip install --index-url https://test.pypi.org/simple/ your-package-name

Comments

Content