classification
Title: make install doesn't respect configure --with-platlibdir=lib64
Type: Stage: resolved
Components: Build Versions: Python 3.10, Python 3.9
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Arfrever, miss-islington, ned.deily, vstinner
Priority: normal Keywords: patch

Created on 2020-05-19 15:00 by vstinner, last changed 2020-06-09 14:45 by vstinner. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 20736 merged vstinner, 2020-06-08 18:01
PR 20761 merged miss-islington, 2020-06-09 13:33
Messages (5)
msg369362 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-05-19 15:00
bpo-1294959 added --with-platlibdir option to configure, but "make install" doesn't fully respect it. Example:

./configure --prefix /opt/py39b1 --with-platlibdir=lib64
make
make install

I get:

/opt/py39b1/lib/python3.9/lib-dynload/readline.cpython-39-x86_64-linux-gnu.so

whereas Python doesn't use this directory:

$ /opt/py39b1/bin/python3.9 -m site
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
sys.path = [
    '/home/vstinner/Python-3.9.0b1',
    '/opt/py39b1/lib64/python39.zip',
    '/opt/py39b1/lib64/python3.9',
    '/opt/py39b1/lib64/lib-dynload',
    '/home/vstinner/.local/lib/python3.9/site-packages',
    '/opt/py39b1/lib64/python3.9/site-packages',
]
USER_BASE: '/home/vstinner/.local' (exists)
USER_SITE: '/home/vstinner/.local/lib/python3.9/site-packages' (exists)
ENABLE_USER_SITE: True


Python looks into /opt/py39b1/lib64/lib-dynload ("lib64")

make install writes into /opt/py39b1/lib/python3.9/lib-dynload/ ("lib")
msg369363 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-05-19 15:04
The Fedora package is built using --libdir=/usr/lib64 --with-platlibdir=lib64 which works around the issue:

+ /builddir/build/BUILD/Python-3.9.0b1/configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-platlibdir=lib64 --enable-ipv6 --enable-shared --with-computed-gotos=yes --with-dbmliborder=gdbm:ndbm:bdb --with-system-expat --with-system-ffi --enable-loadable-sqlite-extensions --with-dtrace --with-lto --with-ssl-default-suites=openssl --with-valgrind --without-ensurepip --enable-optimizations
msg371105 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-06-09 13:32
New changeset 51ae31e5b93b986e57a7e18e25f981a6ffcdefb7 by Victor Stinner in branch 'master':
bpo-40684: Fix make install for platlibdir=lib64 (GH-20736)
https://github.com/python/cpython/commit/51ae31e5b93b986e57a7e18e25f981a6ffcdefb7
msg371106 - (view) Author: miss-islington (miss-islington) Date: 2020-06-09 13:55
New changeset 6cb24a035c5980cab39b6dc5d70762af07293bea by Miss Islington (bot) in branch '3.9':
bpo-40684: Fix make install for platlibdir=lib64 (GH-20736)
https://github.com/python/cpython/commit/6cb24a035c5980cab39b6dc5d70762af07293bea
msg371111 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-06-09 14:45
> make install writes into /opt/py39b1/lib/python3.9/lib-dynload/ ("lib")

I tested manually my fix: it works as expected.

Install:

./configure --prefix /opt/py39_lib64 --with-platlibdir=lib64
make
make install

Test:

$ /opt/py39_lib64/bin/python3.9 -m site
sys.path = [
    '/',
    '/opt/py39_lib64/lib64/python39.zip',
    '/opt/py39_lib64/lib64/python3.9',
    '/opt/py39_lib64/lib64/python3.9/lib-dynload',
    '/home/vstinner/.local/lib/python3.9/site-packages',
    '/opt/py39_lib64/lib64/python3.9/site-packages',
]
USER_BASE: '/home/vstinner/.local' (exists)
USER_SITE: '/home/vstinner/.local/lib/python3.9/site-packages' (exists)
ENABLE_USER_SITE: True

$ /opt/py39_lib64/bin/python3.9 
Python 3.9.0b2+ (heads/3.9:6cb24a035c, Jun  9 2020, 16:43:12) 
[GCC 10.1.1 20200507 (Red Hat 10.1.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _asyncio
>>> _asyncio
<module '_asyncio' from '/opt/py39_lib64/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
History
Date User Action Args
2020-06-09 14:45:39vstinnersetmessages: + msg371111
2020-06-09 14:39:04vstinnersetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2020-06-09 13:55:00miss-islingtonsetmessages: + msg371106
2020-06-09 13:33:54miss-islingtonsetnosy: + miss-islington
pull_requests: + pull_request19961
2020-06-09 13:32:51vstinnersetmessages: + msg371105
2020-06-08 18:01:51vstinnersetkeywords: + patch
stage: patch review
pull_requests: + pull_request19943
2020-05-19 22:07:51ned.deilysetnosy: + ned.deily
2020-05-19 17:54:27Arfreversetnosy: + Arfrever
2020-05-19 15:04:46vstinnersetmessages: + msg369363
2020-05-19 15:00:36vstinnersetversions: + Python 3.10
2020-05-19 15:00:31vstinnercreate