classification
Title: freeze.py doesn't support sys.platlibdir different than lib nor multiarch
Type: Stage: resolved
Components: Unicode Versions: Python 3.10, Python 3.9, Python 3.8
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: ezio.melotti, miss-islington, vstinner
Priority: normal Keywords: patch

Created on 2020-12-10 10:01 by vstinner, last changed 2020-12-17 14:29 by vstinner. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 23792 merged vstinner, 2020-12-16 08:13
PR 23817 merged miss-islington, 2020-12-17 11:21
PR 23818 merged miss-islington, 2020-12-17 11:22
Messages (8)
msg382821 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-12-10 10:01
Tools/freeze/freeze.py doesn't support config directory using multiarch nor directory using a sys.platlibdir different than "lib". In short, it doesn't work on Fedora 33 which uses:

/usr/lib64/python3.10/config-3.10-x86_64-linux-gnu/

It might be possible to copy/paste the code creating the config-xxx path from Lib/sysconfig.py to Tools/freeze/freeze.py, but I would prefer to reuse code if possible, to make the code more sustainable.

Maybe we can add a private function to get the path to the "config" directory.

Or even a public function.
msg383119 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-12-16 08:02
Tools/freeze/freeze.py is broken for 4 years, since Python 3.6 which added sys.implementation._multiarch to the config directory in sysconfig:

commit 5553231b91e05cf93827b33a79aebe62c4370a09
Author: doko@ubuntu.com <doko@ubuntu.com>
Date:   Tue Jun 14 08:55:19 2016 +0200

    - Issue #23968: Rename the platform directory from plat-$(MACHDEP) to
      plat-$(PLATFORM_TRIPLET).
      Rename the config directory (LIBPL) from config-$(LDVERSION) to
      config-$(LDVERSION)-$(PLATFORM_TRIPLET).
      Install the platform specifc _sysconfigdata module into the platform
      directory and rename it to include the ABIFLAGS.
msg383120 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-12-16 08:03
I found this issue while working on bpo-42591 which exported the missing Py_FrozenMain() symbol.
msg383122 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-12-16 08:09
There are better maintained alternatives:

* PyOxidizer
* pyInstaller
* bbFreeze
* py2exe
* cx_Freeze
* py2app
* etc.
msg383151 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-12-16 11:12
New changeset 1c653f17cb84d81df3a74ab0b42140d2bb68c5c4 by Victor Stinner in branch 'master':
bpo-42613: Fix freeze.py config directory (GH-23792)
https://github.com/python/cpython/commit/1c653f17cb84d81df3a74ab0b42140d2bb68c5c4
msg383153 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-12-16 11:16
I tested my fix with these commands:
---
./configure --with-platlibdir=lib64 --enable-shared --prefix /opt/py310 CFLAGS="-O0"
make
make install
# move outside CPython source tree
cd

mkdir hello
cd hello
echo 'print("hello")' > hello.py

cp -R  ~/python/master/Tools/freeze/ .
LD_LIBRARY_PATH=/opt/py310/lib /opt/py310/bin/python3.10 freeze/freeze.py hello.py
---

Output:
---
$ LD_LIBRARY_PATH=/opt/py310/lib ./hello 
hello
---
msg383235 - (view) Author: miss-islington (miss-islington) Date: 2020-12-17 11:40
New changeset 829272e67bbd4b2cc76c01cd20265eb114b392a2 by Miss Islington (bot) in branch '3.8':
bpo-42613: Fix freeze.py config directory (GH-23792)
https://github.com/python/cpython/commit/829272e67bbd4b2cc76c01cd20265eb114b392a2
msg383248 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-12-17 14:29
New changeset 79c535796da4a1377364910e309b97e53c3e51ef by Miss Islington (bot) in branch '3.9':
bpo-42613: Fix freeze.py config directory (GH-23792) (GH-23817)
https://github.com/python/cpython/commit/79c535796da4a1377364910e309b97e53c3e51ef
History
Date User Action Args
2020-12-17 14:29:52vstinnersetversions: + Python 3.8, Python 3.9
2020-12-17 14:29:45vstinnersetmessages: + msg383248
2020-12-17 11:40:43miss-islingtonsetmessages: + msg383235
2020-12-17 11:22:11miss-islingtonsetpull_requests: + pull_request22678
2020-12-17 11:21:59miss-islingtonsetnosy: + miss-islington

pull_requests: + pull_request22677
2020-12-16 11:16:49vstinnersetmessages: + msg383153
2020-12-16 11:13:01vstinnersetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2020-12-16 11:12:42vstinnersetmessages: + msg383151
2020-12-16 08:13:00vstinnersetkeywords: + patch
stage: patch review
pull_requests: + pull_request22648
2020-12-16 08:09:21vstinnersetmessages: + msg383122
2020-12-16 08:03:24vstinnersetmessages: + msg383120
2020-12-16 08:02:45vstinnersetmessages: + msg383119
2020-12-10 10:01:58vstinnercreate