受限网络环境下Python包的构建、分发与安装方案咨询
受限环境下Python内部包构建与安装方案
一、最简合规的无依赖构建方案(仅用setuptools)
既然你的工具只依赖标准库,完全可以绕开build包,直接用setuptools完成构建,不需要额外安装任何依赖:
- 整理项目结构:
保持最基础的结构即可:your-tool/ ├── your_tool/ # 你的工具源码目录 │ ├── __init__.py │ └── main.py └── pyproject.toml # 仅声明构建后端 - 编写pyproject.toml:
只需要指定setuptools作为构建后端,内容极简:[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" - 用setup.cfg替代setup.py:
setuptools官方推荐用setup.cfg管理打包配置,完全不需要写Python代码,彻底避开distutils弃用的问题:[metadata] name = your-tool version = 0.1.0 author = 你的名字 description = 自用标准库依赖工具 [options] packages = find: python_requires = >=3.8 - 在受控外网环境构建包:
找一台能连外网的机器(比如你的个人电脑),确保安装了指定版本的setuptools(pip install setuptools>=61.0),然后执行构建命令:
执行后python -m setuptools sdist bdist_wheeldist/目录会生成两个文件:源码tarball(.tar.gz)和通用wheel(.whl),这两个文件可以直接拿到受限环境分发。 - 受限环境安装:
团队成员拿到包后,用你已经在使用的命令安装即可:
因为工具只依赖标准库,pip install --no-deps dist/your-tool-0.1.0.tar.gz # 或者用wheel包,安装更快 pip install --no-deps dist/your_tool-0.1.0-py3-none-any.whl--no-deps完全不会影响功能。
二、如果坚持要用setup.py(无视弃用提示的场景)
如果你还是想用setup.py,也可以基于setuptools编写,不要直接依赖已移除的distutils:
from setuptools import setup, find_packages setup( name="your-tool", version="0.1.0", packages=find_packages(), python_requires=">=3.8", author="你的名字", description="自用标准库依赖工具" )
同样搭配上面的极简pyproject.toml,然后用python -m setuptools sdist bdist_wheel构建。这种方式虽然不是官方最推荐,但在受限环境下足够稳定,且不会依赖额外的build包。
三、分发流程优化建议
- 统一构建环境:固定一台有外网的受控机器完成所有包的构建,提前把setuptools更新到指定版本,确保每次构建的包一致,避免环境差异导致的问题。
- 搭建内部PyPI仓库:如果团队有多个工具需要分发,可以用devpi搭建一个简单的内部仓库,把构建好的包上传进去。成员安装时指定
--index-url指向内部仓库,再加--no-deps,批量管理更方便。 - 验证包完整性:构建后计算包的哈希值(比如MD5或SHA256),分发给成员时附带哈希,确保包在传输过程中没有被篡改,符合安全合规要求。
内容的提问来源于stack exchange,提问作者GandalfDG
相关产品推荐
相关产品推荐

