python-3.x - 在ubuntu上安装没有pip的python

标签 python-3.x docker ubuntu pip

我需要在我从官方“ubuntu”Docker 镜像构建的自定义 Docker 容器中安装一个 Python 包,所以我想尽量减少它使用的空间。 Python3 可以正常安装并运行,但由于某种原因,不包括 pip。

所以我通过 apt install python3-pip 安装,这有效,但它有 300 兆,安装需要几分钟(显然是因为它安装了一大堆东西来构建来自 gcc 等的二进制包)。

当然,我可以在安装我想要的依赖项后从图像中卸载 python3-pip,另外使用 apt autoremove 来摆脱 299 megs。然而,这需要一分钟。

因此,尽管上述方法有效,但它显着增加了我的 Docker 镜像的构建时间。所以我尝试看看是否有一种无需 pip 即可安装依赖项的方法:

我尝试从 PyPI 下载依赖项的 .tar.gz,提取并尝试 python3 setup.py install,但这给我带来了一个奇怪的错误:

Traceback (most recent call last):
  File "setup.py", line 59, in <module>
    from distutils import log
ImportError: cannot import name 'log'

我想也许我需要安装 setuptools,或者升级 distutils。

我尝试使用官方网站的 get-pip.py 但也失败了:

Traceback (most recent call last):
  File "get-pip.py", line 20890, in <module>
    main()
  File "get-pip.py", line 197, in main
    bootstrap(tmpdir=tmpdir)
  File "get-pip.py", line 82, in bootstrap
    import pip._internal
  File "/tmp/tmpjpa5gs_x/pip.zip/pip/_internal/__init__.py", line 40, in <module>
  File "/tmp/tmpjpa5gs_x/pip.zip/pip/_internal/cli/autocompletion.py", line 8, in <module>
  File "/tmp/tmpjpa5gs_x/pip.zip/pip/_internal/cli/main_parser.py", line 8, in <module>
  File "/tmp/tmpjpa5gs_x/pip.zip/pip/_internal/cli/cmdoptions.py", line 17, in <module>
  File "/tmp/tmpjpa5gs_x/pip.zip/pip/_internal/locations.py", line 10, in <module>
ImportError: cannot import name 'sysconfig'

这很奇怪,因为如果我启动 python3,import sysconfig 工作正常。

我还尝试了 apt install python-pyyaml(我在 Docker 镜像中需要的依赖项),但它似乎不存在。

所以我别无选择。

最佳答案

我遇到了类似的问题,想提供一个替代解决方案。

在 Ubuntu 20.04 上,build-essential 和 python3-dev 是 python3-pip 的推荐软件包,因此您可以使用 --no-install-recommends 选项跳过它们:

RUN apt update -y && \
    apt install python3 python3-pip --no-install-recommends -y && \
    apt clean

这使我的图像从 420MB 减少到 165MB,显然构建时间也更快了。

注意:这适用于纯 Python 包,但如果您想编译任何东西,您可能需要 build-essential 和 python3-dev

有用的链接

关于python-3.x - 在ubuntu上安装没有pip的python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53126015/

相关文章:

php - Docker上的Symfony4 Uncaught BadRequestHttpException

node.js - 如何停止以 --daemonize yes 启动的 redis 服务器

Ubuntu 14.04 puma Upstart 失败,出现 "init: Failed to spawn puma main process: unable to execute: No such file or directory"

linux - Ubuntu 14.04上Hadoop多节点集群手动安装

Docker 在生产中编写?

如果 5 行中的任何 3 行满足特定条件,Python 将返回 True

python-3.x - 使用 Pytest 在函数中引发的模拟异常

python - 如果我在 `pprint()` 上导入 `print()` 会爆炸什么?

linux - Docker 端口映射是主机到容器还是容器到主机?

python - Sphinx 找不到我的 python 文件。说 'no module named ...'