python / python/cpython

python3-config folder dependent result

未关闭
#101,735 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

build type-bug
主要语言
Python
星标
77.2k
派生
36k
PR 合并指标
PR 指标待抓取

描述

Bug report

Python is build into a manylinux_2_28 docker image with following commands (image is py3.11-latest from my dockerhub repo, created with this Dockerfile):

./configure --enable-shared --enable-optimizations --disable-test-modules --prefix=/opt/build_python/installed
make altinstall

the process ends correctly, at the end I found the content into expected folder

/opt/build_python/installed/lib
├── [lrwxrwxrwx root     root    ]  libpython3.11.so -> libpython3.11.so.1.0
├── [-rwxr-xr-x root     root    ]  libpython3.11.so.1.0
├── [-rwxr-xr-x root     root    ]  libpython3.so
/opt/build_python/installed/bin
├── [-rwxr-xr-x root     root    ]  2to3-3.11
├── [-rwxr-xr-x root     root    ]  idle3.11
├── [-rwxr-xr-x root     root    ]  pip3.11
├── [-rwxr-xr-x root     root    ]  pydoc3.11
├── [-rwxr-xr-x root     root    ]  python3.11
└── [-rwxr-xr-x root     root    ]  python3.11-config

and if I run python3.11-config FROM INSIDE that folder I obtain the expected result (look at the -L part)

[root@919ee1a66e62 opt]# /opt/build_python/installed/bin/python3.11-config --embed --ldflags
 -L/opt/build_python/installed/lib -lpython3.11 -lpthread -ldl  -lutil -lm

If I do link that executable into /usr/local/bin and then run the same command, the output at -L flag part is different:

[root@919ee1a66e62 opt]# ln -s /opt/build_python/installed/bin/python3.11-config /usr/local/bin/python3-config

[root@919ee1a66e62 opt]# file /usr/local/bin/python3-config
/usr/local/bin/python3-config: symbolic link to /opt/build_python/installed/bin/python3.11-config

[root@919ee1a66e62 opt]# ls -l /usr/local/bin/python3-config
lrwxrwxrwx 1 root root 49 Feb  9 10:05 /usr/local/bin/python3-config -> /opt/build_python/installed/bin/python3.11-config

[root@919ee1a66e62 opt]# /usr/local/bin/python3-config --embed --ldflags
 -L/usr/local/lib -lpython3.11 -lpthread -ldl  -lutil -lm

this difference, when building C extension, led to have an error on dl phase cannot find -lpython3.11: No such file or directory because of wrong lib folder used.

I expected that python3-config's output, even if executed via symlink, should be the same.

Please let me know if my expectation is not correct, thanks.

Your environment

A manylinux_2_28_86_x64 docker image used to build python 3.11.1 into.
Then doing the steps above into the docker container.

  • CPython versions tested on: 3.11.1
  • Operating system and architecture: manylinux (CentOS) , x64

Thanks for this awesome programming language.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

先从报告中的 configure 和 make altinstall 命令开始,然后检查生成的 /opt/build_python/installed/bin/python3.11-config 和 Dockerfile_2_28_x64_py311。直接运行其 --embed --ldflags 形式,并通过符号链接 /usr/local/bin/python3-config 运行一次,然后确定两次调用是否应当产生相同的库路径。

由索引模型根据 Issue 内容生成。

评估

技术栈
python, shell
领域
build-system
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
45/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。