python - 如何配置Shebang行内部Python工具
问题描述
我正在尝试构建一个最小的 docker 映像,除了运行 Python 解释器之外别无他法。在开发过程中,我从 alpine 开始,最终的图像将是 build FROM scratch
。我正在使用 Linux Mint 机器。
我能够编译 Python 编译器并将其安装到我当前的工作目录中,如下所示:
cd Python-3.8.7
./configure --prefix=$PWD/../python
make install
但是,我没有找到如何--prefix
正确调整设置,以便创建的 shebang 稍后在 docker 容器中工作。
第一行./python/pip3
包含我的主机的绝对路径并读取
#!/home/orion/minimal_py_image/Python-3.8.7/../python/bin/python3.8
但它应该读
#!/python/bin/python3.8
因为/python
是在 docker 镜像中找到 Python 解释器的位置。
我怎样才能欺骗make install
脚本以便最终目的地是/python/bin
?
我想将构建保留在当前目录中,即不使用/python
我进行编译的主机上的文件夹。
附加信息
可能与这个问题没有直接关系,但作为参考:这是我正在尝试工作的 Dockerfile:
FROM alpine
COPY python /python
COPY lib64/* /lib64/
ENV LD_LIBRARY_PATH=/usr/lib64/:/lib64/:/python/lib
ENV PATH="${PATH}:/python/bin"
我已经能够运行 Python,docker run -it mini python3 -c "print('hello from python')"
但由于错误的 shebang,pip 还没有工作。
解决方案
基于 Autoconf 的构建系统中的一个常见约定是支持 Make 变量DESTDIR
。运行时make install
,如果DESTDIR
设置了,它实际上会安装到配置的目录下DESTDIR
,但仍然使用原始路径构建。然后,您可以创建目标目录的存档,或者在 Docker 上下文中,使用该目录作为构建上下文。
cd Python-3.8.7
# Use the final install target as the --prefix
./configure --prefix=/python
# Installs into e.g. ../python/python/bin/python3.8
make install DESTDIR=../python
cd ../python
tar cvzf ../python.tar.gz .
您可以在很多地方看到Python Makefile 中引用的这个变量。
推荐阅读
- powershell - Azure 广告将成员从一个组添加到另一个组
- c# - 硬件安全模块:如何使用数字签名
- apache - 应用程序和网站的虚拟主机,在端口 80 和应用程序 81 访问网站?
- reactjs - Cancelling axios requests when doing 'instant search' type input boxes
- flutter - 使 Column 的子项(例如容器布局)水平 wrap_content
- sql - 执行带有输出参数的存储过程会等到它完成执行吗?
- android-studio - 如何返回 GitHub 的一个点并且仍在 Android Studio 的 master 分支中?
- javascript - Antd 过滤无法正常工作,执行客户端代码但没有过滤发生
- loops - 一位分支预测
- redux - What is a difference between mapStateToProps,mapDispatchToProps types and selector in reactnative