[Pythonmac-SIG] Problems building a binary from cpython that can be installed in /Users/{USER}/Library

Barry Scott barry at barrys-emacs.org
Sun Nov 14 10:57:13 EST 2021



> On 10 Nov 2021, at 20:28, Paul Romer <paul at paulromer.net> wrote:
> 
> I am new to this sig. I hope it is appropriate to pose the following detailed question to its members. Let me know if I have misunderstood. 
> 
> I'll provide a bit of background, specify the steps I took, then describe the two issues I'm facing on which I would welcome advice. 
> 
> =====================================================================
> 
> Background: 
> I am trying to create a self-contained Python application that a user could download and run on MacOS that does not have Python 3 installed. I am aware that PyInstaller and py2app are alternative paths for creating self-contained apps and am pursuing them in parallel. 
> 
> The issue I want to describe here arose as part of experiments with the process for creating a binary for a recent version of Python (3.9.8) that can be installed under the user's home directory. 
> 
> /Users/{USER}/Library. 
> 
> According to the information in the cpython repository, it seems that it should be possible to build an installer for a full version of Python that can be installed someplace on a Mac other than the default location: /Library. In particular, one should be able to do this using 
> 
> build-installer.py 
> 
> in the
> 
> Mac/BuildScript 
> 
> directory. 
> 
> =====================================================================
> 
> Steps I Took:
> 
> In the cpython directory I ran: 
> 
> > ./configure --enable-framework=/Users/{USER}/Library/Frameworks \
> --enable-optimizations

Why do you think you need to build CPYTHON at all?

I use py3app with the python.org <http://python.org/> downloaded versions of python.

> 
> I confirmed that the Makefile included the line: 
> 
> CONFIG_ARGS=     '--enable-framework=/Users/{USER}/Library/Frameworks' '--enable-optimizations'
> 
> (I also tried replacing {USER} with the actual user on my system, 'admin'. This yielded the same results.)  
> 
> I put the external files OpenSSL, tcl/tck, ... (details below) that are required into the 
> 
> .../Universal/other-sources 
> 
> directory. I deleted my install of Python3.9 and backed-up and deleted all the files from 
> 
> /usr/local/bin 
> 
> Then from 
> 
> /Mac/BuildScript 
> 
> I ran 
> 
> > python3 build-installer.py \
> --universal-archs=intel-64 \
> --dep-target=11
> 
> Along the way, there were several warnings, but no errors. The end result is a dmg file: 
> 
> python-3.9.8+-macos12-2021-11-10.dmg
> 
> =====================================================================
> 
> Issues:
> 
> 1. I am not sure how to convert the dmg into a "macOS flat installer package" and would welcome any advice on this point. 


You do not need to. All the user needs to do it drag the <yourapp>.app folder into (typically) /Applications.

> 
> 2. But in any case, I do not think that an installer based on this dmg will allow an install in the Library of the user. When I inspect the dmg file, I find that the post-install scripts include references to the usual file location in /Library. For example, the script that runs after installing the framework has the lines: 
> 
> PYVER="3.9"
> FWK="/Library/Frameworks/Python.framework/Versions/3.9"

 What post-install script? That's not something that py2app does.

> 
> The script that runs after installing the files for pip has the lines: 
> 
> PYVER="3.9"
> PYMAJOR="3"
> FWK="/Library/Frameworks/Python.framework/Versions/${PYVER}"
> RELFWKBIN="../../..${FWK}/bin"
> 
> This suggests that I have misunderstood the instructions. So I would appreciate any advice on how to succeed on this path, or suggestions about alternative paths that might work. In particular, the alternative that might be feasible would be to use the work from 
> 
> https://github.com/codrsquad/portable-python <https://github.com/codrsquad/portable-python>
> 
> This is a recent project, not the one with the same name that was abandoned that you'll find here:
> 
> https://portablepython.com/ <https://portablepython.com/>
For Barry's Emacs I do 2 steps.

1. Build the .app bundle.
2. Build .dmg that has a bunch of files including the .app bundle.

There may be a bit too much complexity but have look at how I build the .app bundle in
https://github.com/barry-scott/BarrysEmacs/blob/master/Editor/PyQtBEmacs/build-macosx.sh <https://github.com/barry-scott/BarrysEmacs/blob/master/Editor/PyQtBEmacs/macosx.mak>
and
https://github.com/barry-scott/BarrysEmacs/blob/master/Editor/PyQtBEmacs/brand.setup-macosx.py <https://github.com/barry-scott/BarrysEmacs/blob/master/Editor/PyQtBEmacs/brand.setup-macosx.py>

I'm using PyQt not Tk.

Barry


> 
> 
> Thanks for reading through all this! 
> 
> 
> =====================================================================
> 
> PS: Contents of my .../Universal/other-sources directory: 
> 
> -rw-r--r--   1 admin  staff    367573 Nov 10 00:53 ncurses-5.9-20120616-patch.sh.bz2
> -rw-r--r--   1 admin  staff   2826473 Nov 10 00:53 ncurses-5.9.tar.gz
> -rw-r--r--   1 admin  staff   9834044 Nov  9 22:19 openssl-1.1.1l.tar.gz
> -rw-rw-rw-@  1 admin  staff   2956627 Nov 10 01:06 sqlite-autoconf-3350500.tar.gz
> -rw-rw-rw-@  1 admin  staff  10259009 Nov  9 22:55 tcl8.6.11-src.tar.gz
> -rw-rw-rw-@  1 admin  staff   4496914 Nov 10 00:37 tk8.6.11-src.tar.gz
> -rw-rw-rw-@  1 admin  staff   1490665 Nov 10 00:45 xz-5.2.3.tar.gz
> 
> =====================================================================
> 
> 
> Paul Romer 
> paul at paulromer.net <mailto:paul at paulromer.net> | paulromer.net <http://paulromer.net/> | @paulromer <https://twitter.com/paulmromer?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor>
> 
> _______________________________________________
> Pythonmac-SIG maillist  -  Pythonmac-SIG at python.org
> https://mail.python.org/mailman/listinfo/pythonmac-sig
> unsubscribe: https://mail.python.org/mailman/options/Pythonmac-SIG

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/pythonmac-sig/attachments/20211114/7c448af5/attachment-0001.html>


More information about the Pythonmac-SIG mailing list