我需要在我从官方“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/