在我的工作场所,pip 无法访问外部世界来下载软件包。 我不确定到底是什么系统阻止了这种情况,但理想情况下我不应该从互联网上安装任何旧软件包。我可以在线安装软件包的唯一方法是从 PyPI 站点或软件包的 github 下载源代码发行版或 Wheel 并运行
pip install --no-deps <package path>
,这样 pip 就不会尝试在线获取依赖项,否则会长时间挂起时间然后失败。
我正在开发一些供我自己使用的工具,并希望将它们打包并分发给我团队的其他成员,以便可以从 tarball 或wheel安装它们,并且不需要他们上线并手动提取更多依赖项。我正在编写的工具使用标准库,因此它们不需要任何在线依赖项。
我倾向于忽略弃用并使用现已删除的
setuptools
模块的 distutils
版本,并为我的包编写 setup.py
文件。然而,这已被弃用或至少看起来非常不鼓励。 setuptools 用户指南提供了使用 build
包的说明,但是这个包有一组依赖项,其中一些有自己的依赖项,手动安装所有这些包是一件非常头疼的事情。
在顶层
build
需要:
其中一些有自己的依赖项列表。
在类似的受限环境中是否有人有构建和安装内部软件包的首选方法?如果是的话,你的流程是什么?
在理想的世界中,我可以毫无问题地安装我需要的所有依赖项,但我知道这会带来安全隐患,并且我认为我无法为 pip 的访问被阻止做出任何类型的例外。
我已经阅读了各种 Python 打包方法的文档,我能找到的最简单的方法仍然需要
build
包,正如我所说,它需要足够大的依赖树来安装它们手动是不可能的,并且出于安全原因仍然处于可接受的灰色区域。
setuptools 文档建议不要使用
setup.py
:setuptools 快速入门
最新版本的 Python 正式从标准库中删除了
distutils
,并且在很大程度上不鼓励继续使用带有 setuptools 模块的 setup.py 构建 PEP 0632
在我的情况下,最直接的做法似乎是忽略不鼓励直接使用
setup.py
的事实,无论如何都要这样做。通过 setup.py 从 setup
导入 setuptools
,我可以构建一个可以通过运行 python setup.py sdist
使用 pip 安装的包
在评论中的建议中,这似乎是构建仅需要安装 setuptools(如果尚未安装)的软件包的唯一方法。
我仍然想要一个更现代、更优雅的解决方案,但由于限制 pip 访问互联网的因素,这可能是不可能的。