如何构建/分发/安装 Python 包并限制对 PyPI 包的访问?

问题描述 投票:0回答:1

在我的工作场所,pip 无法访问外部世界来下载软件包。 我不确定到底是什么系统阻止了这种情况,但理想情况下我不应该从互联网上安装任何旧软件包。我可以在线安装软件包的唯一方法是从 PyPI 站点或软件包的 github 下载源代码发行版或 Wheel 并运行

pip install --no-deps <package path>
,这样 pip 就不会尝试在线获取依赖项,否则会长时间挂起时间然后失败。

我正在开发一些供我自己使用的工具,并希望将它们打包并分发给我团队的其他成员,以便可以从 tarball 或wheel安装它们,并且不需要他们上线并手动提取更多依赖项。我正在编写的工具使用标准库,因此它们不需要任何在线依赖项。

我倾向于忽略弃用并使用现已删除的

setuptools
模块的
distutils
版本,并为我的包编写
setup.py
文件。然而,这已被弃用或至少看起来非常不鼓励。 setuptools 用户指南提供了使用
build
包的说明,但是这个包有一组依赖项,其中一些有自己的依赖项,手动安装所有这些包是一件非常头疼的事情。

在顶层

build
需要:

  • colorama(这个感觉应该是可选的)
  • 导入lib-元数据
  • 包装
  • pyproject_hooks
  • 汤姆利

其中一些有自己的依赖项列表。

在类似的受限环境中是否有人有构建和安装内部软件包的首选方法?如果是的话,你的流程是什么?

在理想的世界中,我可以毫无问题地安装我需要的所有依赖项,但我知道这会带来安全隐患,并且我认为我无法为 pip 的访问被阻止做出任何类型的例外。

我尝试过的事情

我已经阅读了各种 Python 打包方法的文档,我能找到的最简单的方法仍然需要

build
包,正如我所说,它需要足够大的依赖树来安装它们手动是不可能的,并且出于安全原因仍然处于可接受的灰色区域。

setuptools 文档建议不要使用

setup.py
setuptools 快速入门

最新版本的 Python 正式从标准库中删除了

distutils
,并且在很大程度上不鼓励继续使用带有 setuptools 模块的 setup.py 构建 PEP 0632

python dependency-management pypi python-packaging
1个回答
0
投票

在我的情况下,最直接的做法似乎是忽略不鼓励直接使用

setup.py
的事实,无论如何都要这样做。通过 setup.py 从
setup
导入
setuptools
,我可以构建一个可以通过运行
python setup.py sdist

使用 pip 安装的包

在评论中的建议中,这似乎是构建仅需要安装 setuptools(如果尚未安装)的软件包的唯一方法。

我仍然想要一个更现代、更优雅的解决方案,但由于限制 pip 访问互联网的因素,这可能是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.