不同python版本执行时和用奇点构建图像时,相同的官方python docker图像
Different python versions when exec and when building image with singularity, the same official python docker image
我正在尝试根据 docker://python:3.7-buster
.
创建奇点图像
在 %post
部分,当我 运行 /usr/bin/env python3
与我 singularity exec
时使用了不同版本的 python 相同的东西。
这是我的测试定义文件:
$ cat test.def
Bootstrap:docker
From:python:3.7-buster
%post
/usr/bin/env python3 --version
下面是我尝试构建它时发生的情况:
$ sudo singularity build test.sif test.def
INFO: Starting build...
Getting image source signatures
Skipping fetch of repeat blob sha256:4a56a430b2bac33260d6449e162017e2b23076c6411a17b46db67f5b84dde2bd
Skipping fetch of repeat blob sha256:4b5cacb629f5c5323a32103e665756e5d50fe133b3db72d444f370566b713a6a
Skipping fetch of repeat blob sha256:14408c8d4f9a59a5da8f4cc40650be9a8d0991fa1ce1b2fb2767f289a9cc410d
Skipping fetch of repeat blob sha256:ea67eaa7dd42136287337f879ef20b4ee73baaa108d833d267ef99dd787cdcbf
Skipping fetch of repeat blob sha256:4d134ac3fe4b8dd8136d9e7acbb2708ead2154185b27c09ae62ca099070cfb27
Skipping fetch of repeat blob sha256:4c55f6f5d7f035e446f063331d9160bb00ed3da4632105ef5adedee3317c902f
Skipping fetch of repeat blob sha256:6ae475e50652d8ee1a2fdeb59ccce81d14c8c20e0fdfe94f22f1c69bd3e3befb
Skipping fetch of repeat blob sha256:6f41526442299286e270923d6cca3a516c3e1850f7e06c3facc0df7da8a5afbc
Skipping fetch of repeat blob sha256:6933d3d4604265f0c8f2a3806222749809c62b6e6a757d1f85720fa81622496d
Copying config sha256:5a5fb77dac35d62c5b062fc35b3b69e61ae68385fb4278ce6076532c3e50e316
7.47 KiB / 7.47 KiB [======================================================] 0s
Writing manifest to image destination
Storing signatures
2019/09/16 11:07:07 info unpack layer: sha256:4a56a430b2bac33260d6449e162017e2b23076c6411a17b46db67f5b84dde2bd
2019/09/16 11:07:09 info unpack layer: sha256:4b5cacb629f5c5323a32103e665756e5d50fe133b3db72d444f370566b713a6a
2019/09/16 11:07:09 info unpack layer: sha256:14408c8d4f9a59a5da8f4cc40650be9a8d0991fa1ce1b2fb2767f289a9cc410d
2019/09/16 11:07:09 info unpack layer: sha256:ea67eaa7dd42136287337f879ef20b4ee73baaa108d833d267ef99dd787cdcbf
2019/09/16 11:07:11 info unpack layer: sha256:4d134ac3fe4b8dd8136d9e7acbb2708ead2154185b27c09ae62ca099070cfb27
2019/09/16 11:07:18 info unpack layer: sha256:4c55f6f5d7f035e446f063331d9160bb00ed3da4632105ef5adedee3317c902f
2019/09/16 11:07:18 info unpack layer: sha256:6ae475e50652d8ee1a2fdeb59ccce81d14c8c20e0fdfe94f22f1c69bd3e3befb
2019/09/16 11:07:19 info unpack layer: sha256:6f41526442299286e270923d6cca3a516c3e1850f7e06c3facc0df7da8a5afbc
2019/09/16 11:07:19 info unpack layer: sha256:6933d3d4604265f0c8f2a3806222749809c62b6e6a757d1f85720fa81622496d
INFO: Running post scriptlet
+ /usr/bin/env python3 --version
Python 3.7.3
INFO: Creating SIF file...
INFO: Build complete: test.sif
使用系统版本而不是 docker 图像提供的版本,与我 exec
相同命令时发生的情况形成对比:
$ singularity exec docker://python:3.7-buster /usr/bin/env python3 --version
Python 3.7.4
会发生什么?
我尝试使用 $(which python3)
而不是 /usr/bin/env python3
,它在 %post
部分仍然是相同的版本(singularity exec
,它是主机系统的版本被使用)。
我的目标实际上是能够安装一些我从 git 存储库中提取的个人 python 软件包,并且使用 运行 [=25] 的安装脚本进行安装=]
我注意到有一个问题,因为python 3 的系统版本没有包含pip
。
我觉得这里发生了很多事情。您可以通过尝试检查 pip(3) 是否在其中(也可能是您只需要使用 pip3 而不是 pip):
$ which pip
$ which pip3
很遗憾,我无法在另一部分完全帮助您:为什么 3.7.3 优于 3.7.4。通常你可以简单地声明 python3.7 [arg]
但这对这里没有帮助。难道3.7.3来自别处?因为我不知道系统使用 2.7 中的任何其他东西。
您获得的 python 版本不同,因为环境不同。
如果您在 %post
中添加 echo $PATH
,您将得到:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
如果你 运行 singularity exec docker://python:3.7-buster bash -c 'echo $PATH'
你会得到:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/usr/local/bin/python3
是 docker 容器为您编译的较新版本,%post
中的 PATH
优先于 /usr/bin
而不是 /usr/local/bin
.您可以调整 %post
块开头的 PATH
变量来解决问题。
至于为什么它在那里使用不同的PATH
,我不确定。可能值得在 github repo.
提出问题
我正在尝试根据 docker://python:3.7-buster
.
在 %post
部分,当我 运行 /usr/bin/env python3
与我 singularity exec
时使用了不同版本的 python 相同的东西。
这是我的测试定义文件:
$ cat test.def
Bootstrap:docker
From:python:3.7-buster
%post
/usr/bin/env python3 --version
下面是我尝试构建它时发生的情况:
$ sudo singularity build test.sif test.def
INFO: Starting build...
Getting image source signatures
Skipping fetch of repeat blob sha256:4a56a430b2bac33260d6449e162017e2b23076c6411a17b46db67f5b84dde2bd
Skipping fetch of repeat blob sha256:4b5cacb629f5c5323a32103e665756e5d50fe133b3db72d444f370566b713a6a
Skipping fetch of repeat blob sha256:14408c8d4f9a59a5da8f4cc40650be9a8d0991fa1ce1b2fb2767f289a9cc410d
Skipping fetch of repeat blob sha256:ea67eaa7dd42136287337f879ef20b4ee73baaa108d833d267ef99dd787cdcbf
Skipping fetch of repeat blob sha256:4d134ac3fe4b8dd8136d9e7acbb2708ead2154185b27c09ae62ca099070cfb27
Skipping fetch of repeat blob sha256:4c55f6f5d7f035e446f063331d9160bb00ed3da4632105ef5adedee3317c902f
Skipping fetch of repeat blob sha256:6ae475e50652d8ee1a2fdeb59ccce81d14c8c20e0fdfe94f22f1c69bd3e3befb
Skipping fetch of repeat blob sha256:6f41526442299286e270923d6cca3a516c3e1850f7e06c3facc0df7da8a5afbc
Skipping fetch of repeat blob sha256:6933d3d4604265f0c8f2a3806222749809c62b6e6a757d1f85720fa81622496d
Copying config sha256:5a5fb77dac35d62c5b062fc35b3b69e61ae68385fb4278ce6076532c3e50e316
7.47 KiB / 7.47 KiB [======================================================] 0s
Writing manifest to image destination
Storing signatures
2019/09/16 11:07:07 info unpack layer: sha256:4a56a430b2bac33260d6449e162017e2b23076c6411a17b46db67f5b84dde2bd
2019/09/16 11:07:09 info unpack layer: sha256:4b5cacb629f5c5323a32103e665756e5d50fe133b3db72d444f370566b713a6a
2019/09/16 11:07:09 info unpack layer: sha256:14408c8d4f9a59a5da8f4cc40650be9a8d0991fa1ce1b2fb2767f289a9cc410d
2019/09/16 11:07:09 info unpack layer: sha256:ea67eaa7dd42136287337f879ef20b4ee73baaa108d833d267ef99dd787cdcbf
2019/09/16 11:07:11 info unpack layer: sha256:4d134ac3fe4b8dd8136d9e7acbb2708ead2154185b27c09ae62ca099070cfb27
2019/09/16 11:07:18 info unpack layer: sha256:4c55f6f5d7f035e446f063331d9160bb00ed3da4632105ef5adedee3317c902f
2019/09/16 11:07:18 info unpack layer: sha256:6ae475e50652d8ee1a2fdeb59ccce81d14c8c20e0fdfe94f22f1c69bd3e3befb
2019/09/16 11:07:19 info unpack layer: sha256:6f41526442299286e270923d6cca3a516c3e1850f7e06c3facc0df7da8a5afbc
2019/09/16 11:07:19 info unpack layer: sha256:6933d3d4604265f0c8f2a3806222749809c62b6e6a757d1f85720fa81622496d
INFO: Running post scriptlet
+ /usr/bin/env python3 --version
Python 3.7.3
INFO: Creating SIF file...
INFO: Build complete: test.sif
使用系统版本而不是 docker 图像提供的版本,与我 exec
相同命令时发生的情况形成对比:
$ singularity exec docker://python:3.7-buster /usr/bin/env python3 --version
Python 3.7.4
会发生什么?
我尝试使用 $(which python3)
而不是 /usr/bin/env python3
,它在 %post
部分仍然是相同的版本(singularity exec
,它是主机系统的版本被使用)。
我的目标实际上是能够安装一些我从 git 存储库中提取的个人 python 软件包,并且使用 运行 [=25] 的安装脚本进行安装=]
我注意到有一个问题,因为python 3 的系统版本没有包含pip
。
我觉得这里发生了很多事情。您可以通过尝试检查 pip(3) 是否在其中(也可能是您只需要使用 pip3 而不是 pip):
$ which pip
$ which pip3
很遗憾,我无法在另一部分完全帮助您:为什么 3.7.3 优于 3.7.4。通常你可以简单地声明 python3.7 [arg]
但这对这里没有帮助。难道3.7.3来自别处?因为我不知道系统使用 2.7 中的任何其他东西。
您获得的 python 版本不同,因为环境不同。
如果您在 %post
中添加 echo $PATH
,您将得到:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
如果你 运行 singularity exec docker://python:3.7-buster bash -c 'echo $PATH'
你会得到:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/usr/local/bin/python3
是 docker 容器为您编译的较新版本,%post
中的 PATH
优先于 /usr/bin
而不是 /usr/local/bin
.您可以调整 %post
块开头的 PATH
变量来解决问题。
至于为什么它在那里使用不同的PATH
,我不确定。可能值得在 github repo.