Re: Problems building a binary from cpython that can be installed in /Users/{USER}/Library

Christopher Barker <[email protected]> Sun, 14 Nov 2021 09:50:14 -0800
Newsgroups gmane.comp.python.apple
Message-ID <CALn7ch96j96rjmiB31mXgajKH=VHsVAyiBh28nU=pcqOw_3mYw@mail.gmail.com>
--===============4911205781155904835==
Content-Type: multipart/alternative; boundary="00000000000001e57505d0c35409"

--00000000000001e57505d0c35409
Content-Type: text/plain; charset="UTF-8"

I would very highly recommend that you not reinvent the wheel here.

But if you really don't like the way Py2App or PyInstaller does it, then I
wouldn't try to build the entire "normal" mac distribution anyway, and
start at a lower level. Maybe look at homebrew for ideas?

BTW -- there's a third option: conda and "conda constructor" -- might be
worth a look.

-CHB




On Sun, Nov 14, 2021 at 7:57 AM Barry Scott <[email protected]> wrote:

>
>
> On 10 Nov 2021, at 20:28, Paul Romer <[email protected]> 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 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
>
> This is a recent project, not the one with the same name that was
> abandoned that you'll find here:
>
> 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
>
> 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
> [email protected] | paulromer.net | @paulromer
> <https://twitter.com/paulmromer?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor>
>
> _______________________________________________
> Pythonmac-SIG maillist  -  [email protected]
> https://mail.python.org/mailman/listinfo/pythonmac-sig
> unsubscribe: https://mail.python.org/mailman/options/Pythonmac-SIG
>
>
> _______________________________________________
> Pythonmac-SIG maillist  -  [email protected]
> https://mail.python.org/mailman/listinfo/pythonmac-sig
> unsubscribe: https://mail.python.org/mailman/options/Pythonmac-SIG
>


-- 
Christopher Barker, PhD (Chris)

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython

--00000000000001e57505d0c35409
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I would very highly recommend that you not reinvent the wh=
eel here.<div><br></div><div>But if you really don&#39;t=C2=A0like the way =
Py2App or PyInstaller does it, then I wouldn&#39;t try to build the entire =
&quot;normal&quot; mac distribution anyway, and start at a lower level. May=
be look at homebrew for ideas?</div><div><br></div><div>BTW -- there&#39;s =
a third option: conda and &quot;conda constructor&quot; -- might be worth a=
 look.</div><div><br></div><div>-CHB</div><div><br></div><div><br></div><di=
v><br></div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"=
gmail_attr">On Sun, Nov 14, 2021 at 7:57 AM Barry Scott &lt;<a href=3D"mail=
to:[email protected]">[email protected]</a>&gt; wrote:<br></div><=
blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l=
eft:1px solid rgb(204,204,204);padding-left:1ex"><div style=3D"overflow-wra=
p: break-word;"><br><div><br><blockquote type=3D"cite"><div>On 10 Nov 2021,=
 at 20:28, Paul Romer &lt;<a href=3D"mailto:[email protected]" target=3D"_=
blank">[email protected]</a>&gt; wrote:</div><br><div><div dir=3D"ltr"><di=
v><span style=3D"font-family:monospace">I am new to this sig. I hope it is =
appropriate to pose the following detailed question to its members.=C2=A0</=
span><span style=3D"font-family:monospace">Let me know if I have misunderst=
ood. <br></span></div><div><span style=3D"font-family:monospace"><br></span=
></div><div><span style=3D"font-family:monospace">I&#39;ll provide a bit of=
 background, specify the steps I took, then describe the two issues I&#39;m=
 facing on which I would welcome advice. <br></span></div><div><span style=
=3D"font-family:monospace"><br></span></div><div><span style=3D"font-family=
:monospace"><span style=3D"font-family:monospace"><span style=3D"font-famil=
y:monospace">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</s=
pan></span></span></div><div><span style=3D"font-family:monospace"><span st=
yle=3D"font-family:monospace"><span style=3D"font-family:monospace"><br></s=
pan></span></span></div><div><span style=3D"font-family:monospace"><b>Backg=
round: </b></span><span style=3D"font-family:monospace"><br></span></div><d=
iv><span style=3D"font-family:monospace">I am trying to create a self-conta=
ined Python application that a user could download and run on MacOS that do=
es not have Python 3 installed. <span style=3D"font-family:monospace">I am =
aware that PyInstaller and py2app are alternative paths for creating self-c=
ontained apps and am pursuing them in parallel. <br></span></span></div><di=
v><span style=3D"font-family:monospace"><br></span></div><div><span style=
=3D"font-family:monospace">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&#39;s home directory=
. <br></span></div><div><span style=3D"font-family:monospace"><br></span></=
div><div style=3D"margin-left:40px"><span style=3D"font-family:monospace">/=
Users/{USER}/Library. <br></span></div><div><span style=3D"font-family:mono=
space"><br></span></div><div><span style=3D"font-family:monospace">Accordin=
g 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 ins=
talled someplace on a Mac other than the default location: /Library. In par=
ticular, one should be able to do this using <br></span></div><div><span st=
yle=3D"font-family:monospace"><br></span></div><div style=3D"margin-left:40=
px"><span style=3D"font-family:monospace">build-installer.py <br></span></d=
iv><div><span style=3D"font-family:monospace"><br></span></div><div><span s=
tyle=3D"font-family:monospace">in the<br></span></div><div><span style=3D"f=
ont-family:monospace"><br></span></div><div style=3D"margin-left:40px"><spa=
n style=3D"font-family:monospace">Mac/BuildScript <br></span></div><div sty=
le=3D"margin-left:40px"><span style=3D"font-family:monospace"><br></span></=
div><div><span style=3D"font-family:monospace">directory. <br></span></div>=
<div><span style=3D"font-family:monospace"><b><br></b></span></div><div><sp=
an style=3D"font-family:monospace"><b><span style=3D"font-family:monospace"=
><span style=3D"font-family:monospace">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D</span></span></b></span></div><div><span style=3D"fon=
t-family:monospace"><b><span style=3D"font-family:monospace"><span style=3D=
"font-family:monospace"><br></span></span></b></span></div><div><span style=
=3D"font-family:monospace"><b>Steps I Took:</b></span></div><div><span styl=
e=3D"font-family:monospace"><br></span></div><div><span style=3D"font-famil=
y:monospace">In the cpython directory I ran: <br></span></div><div><span st=
yle=3D"font-family:monospace"><br></span></div><div style=3D"margin-left:40=
px"><span style=3D"font-family:monospace">&gt; ./configure --enable-framewo=
rk=3D/Users/{USER}/Library/Frameworks \</span></div><div style=3D"margin-le=
ft:40px"><span style=3D"font-family:monospace">--enable-optimizations<br></=
span></div></div></div></blockquote><div><br></div>Why do you think you nee=
d to build CPYTHON at all?</div><div><br></div><div>I use py3app with the <=
a href=3D"http://python.org" target=3D"_blank">python.org</a>=C2=A0download=
ed versions of python.</div><div><br><blockquote type=3D"cite"><div><div di=
r=3D"ltr"><div><div><div><span style=3D"font-family:monospace"><br></span><=
/div><div><span style=3D"font-family:monospace">I confirmed that the Makefi=
le included the line: <br></span></div><div><span style=3D"font-family:mono=
space"><br></span></div><div><div style=3D"background-color:rgb(255,255,255=
);font-weight:normal;font-size:12px;line-height:18px;white-space:pre-wrap">=
<div style=3D"margin-left:40px"><span style=3D"font-family:monospace"><span=
>CONFIG_ARGS=3D     &#39;--enable-framework=3D/Users/{USER}/Library/Framewo=
rks&#39; &#39;--enable-optimizations&#39;</span></span></div><span style=3D=
"font-family:monospace"><br></span></div><span style=3D"font-family:monospa=
ce">(I also tried replacing {USER} with the actual user on my system, &#39;=
admin&#39;. This yielded the same results.)=C2=A0 <br></span></div><div><sp=
an style=3D"font-family:monospace"><br></span></div><div><span style=3D"fon=
t-family:monospace">I put the external files OpenSSL, tcl/tck, ... (details=
 below) that are required into the <br></span></div><div><span style=3D"fon=
t-family:monospace"><br></span></div><div style=3D"margin-left:40px"><span =
style=3D"font-family:monospace">.../Universal/other-sources <br></span></di=
v><div><span style=3D"font-family:monospace"><br></span></div><div><span st=
yle=3D"font-family:monospace">directory. I deleted my install of Python3.9 =
and backed-up and deleted all the files from <br></span></div><div><span st=
yle=3D"font-family:monospace"><br></span></div><div style=3D"margin-left:40=
px"><span style=3D"font-family:monospace">/usr/local/bin <br></span></div><=
div><span style=3D"font-family:monospace"><br></span></div><div><span style=
=3D"font-family:monospace">Then from <br></span></div><div><span style=3D"f=
ont-family:monospace"><br></span></div><div style=3D"margin-left:40px"><spa=
n style=3D"font-family:monospace">/Mac/BuildScript <br></span></div><div st=
yle=3D"margin-left:40px"><span style=3D"font-family:monospace"><br></span><=
/div><span style=3D"font-family:monospace">I ran <br></span></div><div><div=
><span style=3D"font-family:monospace"><br></span></div><div style=3D"margi=
n-left:40px"><span style=3D"font-family:monospace">&gt; python3 build-insta=
ller.py \<br></span></div><div style=3D"margin-left:40px"><span style=3D"fo=
nt-family:monospace">--universal-archs=3Dintel-64 \<br>--dep-target=3D11</s=
pan></div><div><span style=3D"font-family:monospace"><br></span></div><div>=
<span style=3D"font-family:monospace"><span style=3D"font-family:monospace"=
>Along the way, there were several warnings, but no errors. </span>The end =
result is a dmg file: <br></span></div><div><span style=3D"font-family:mono=
space"><br></span></div><div style=3D"margin-left:40px"><span style=3D"font=
-family:monospace">python-3.9.8+-macos12-2021-11-10.dmg</span></div><div><d=
iv style=3D"margin-left:40px"><span style=3D"font-family:monospace"><br></s=
pan></div><span style=3D"font-family:monospace"><span style=3D"font-family:=
monospace"><span style=3D"font-family:monospace">=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</span></span></span></div><div><span styl=
e=3D"font-family:monospace"><br></span></div><div><span style=3D"font-famil=
y:monospace"><b>Issues:</b></span></div><div><span style=3D"font-family:mon=
ospace"><br></span></div><div><span style=3D"font-family:monospace">1. I am=
 not sure how to convert the dmg into a &quot;macOS flat installer package&=
quot; and would welcome any advice on this point. <br></span></div></div></=
div></div></div></blockquote><div><br></div><div><br></div><div>You do not =
need to. All the user needs to do it drag the &lt;yourapp&gt;.app folder in=
to (typically) /Applications.</div><br><blockquote type=3D"cite"><div><div =
dir=3D"ltr"><div><div><div><span style=3D"font-family:monospace"><br></span=
></div><div><span style=3D"font-family:monospace">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-inst=
all scripts include references to the usual file location in /Library. For =
example, the script that runs after installing the framework has the lines:=
 <br></span></div><div><span style=3D"font-family:monospace"><br></span></d=
iv><div><div style=3D"margin-left:40px"><span style=3D"font-family:monospac=
e">PYVER=3D&quot;3.9&quot;<br>FWK=3D&quot;/Library/Frameworks/Python.framew=
ork/Versions/3.9&quot;<br></span></div></div></div></div></div></div></bloc=
kquote><div><br></div>=C2=A0What post-install script? That&#39;s not someth=
ing that py2app does.</div><div><br><blockquote type=3D"cite"><div><div dir=
=3D"ltr"><div><div><div><span style=3D"font-family:monospace"><br></span></=
div><div><span style=3D"font-family:monospace">The script that runs after i=
nstalling the files for pip has the lines: <br></span></div><div><span styl=
e=3D"font-family:monospace"><br></span></div><div style=3D"margin-left:40px=
"><span style=3D"font-family:monospace">PYVER=3D&quot;3.9&quot;<br>PYMAJOR=
=3D&quot;3&quot;<br>FWK=3D&quot;/Library/Frameworks/Python.framework/Versio=
ns/${PYVER}&quot;<br>RELFWKBIN=3D&quot;../../..${FWK}/bin&quot;</span></div=
><div style=3D"margin-left:40px"><span style=3D"font-family:monospace"><br>=
</span></div><span style=3D"font-family:monospace">This suggests that I hav=
e misunderstood the instructions. So I would appreciate any advice on how t=
o succeed on this path, or suggestions about alternative paths that might w=
ork. In particular, the alternative that might be feasible would be to use =
the work from <br></span></div><div><span style=3D"font-family:monospace"><=
br></span></div><div style=3D"margin-left:40px"><span style=3D"font-family:=
monospace"><a href=3D"https://github.com/codrsquad/portable-python" target=
=3D"_blank">https://github.com/codrsquad/portable-python</a> </span></div><=
div><span style=3D"font-family:monospace"><br></span></div><div><span style=
=3D"font-family:monospace">This is a recent project, not the one with the s=
ame name that was abandoned that you&#39;ll find here:</span></div><div><sp=
an style=3D"font-family:monospace"><br></span></div><div style=3D"margin-le=
ft:40px"><span style=3D"font-family:monospace"><a href=3D"https://portablep=
ython.com/" target=3D"_blank">https://portablepython.com/</a></span></div><=
/div></div></div></blockquote><div><br></div><div>For Barry&#39;s Emacs I d=
o 2 steps.</div><div><br></div><div>1. Build the .app bundle.</div><div>2. =
Build .dmg that has a bunch of files including the .app bundle.</div><div><=
br></div><div>There may be a bit too much complexity but have look at how I=
 build the .app bundle in</div><div><a href=3D"https://github.com/barry-sco=
tt/BarrysEmacs/blob/master/Editor/PyQtBEmacs/macosx.mak" target=3D"_blank">=
https://github.com/barry-scott/BarrysEmacs/blob/master/Editor/PyQtBEmacs/bu=
ild-macosx.sh</a></div><div>and</div><div><a href=3D"https://github.com/bar=
ry-scott/BarrysEmacs/blob/master/Editor/PyQtBEmacs/brand.setup-macosx.py" t=
arget=3D"_blank">https://github.com/barry-scott/BarrysEmacs/blob/master/Edi=
tor/PyQtBEmacs/brand.setup-macosx.py</a></div><div><br></div><div>I&#39;m u=
sing PyQt not Tk.</div><div><br></div><div>Barry</div><div><br></div><br><b=
lockquote type=3D"cite"><div><div dir=3D"ltr"><div><div><span style=3D"font=
-family:monospace"><br></span></div><div><span style=3D"font-family:monospa=
ce"><br></span></div><div><span style=3D"font-family:monospace">Thanks for =
reading through all this! <br></span></div><div><span style=3D"font-family:=
monospace"><br></span></div><div><span style=3D"font-family:monospace"><br>=
</span></div><div><span style=3D"font-family:monospace"><span style=3D"font=
-family:monospace">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D</span></span></div><div><span style=3D"font-family:monospace"><br></spa=
n></div><div><span style=3D"font-family:monospace">PS: Contents of my .../U=
niversal/other-sources directory: <br></span></div><div><span style=3D"font=
-family:monospace"><br></span></div><div><span style=3D"font-family:monospa=
ce">		-rw-r--r-- =C2=A0 1 admin =C2=A0staff =C2=A0 =C2=A0367573 Nov 10 00:5=
3 ncurses-5.9-20120616-patch.sh.bz2<br>		-rw-r--r-- =C2=A0 1 admin =C2=A0st=
aff =C2=A0 2826473 Nov 10 00:53 ncurses-5.9.tar.gz<br>		-rw-r--r-- =C2=A0 1=
 admin =C2=A0staff =C2=A0 9834044 Nov =C2=A09 22:19 openssl-1.1.1l.tar.gz<b=
r>		-rw-rw-rw-@ =C2=A01 admin =C2=A0staff =C2=A0 2956627 Nov 10 01:06 sqlit=
e-autoconf-3350500.tar.gz<br>		-rw-rw-rw-@ =C2=A01 admin =C2=A0staff =C2=A0=
10259009 Nov =C2=A09 22:55 tcl8.6.11-src.tar.gz<br>		-rw-rw-rw-@ =C2=A01 ad=
min =C2=A0staff =C2=A0 4496914 Nov 10 00:37 tk8.6.11-src.tar.gz<br>		-rw-rw=
-rw-@ =C2=A01 admin =C2=A0staff =C2=A0 1490665 Nov 10 00:45 xz-5.2.3.tar.gz=
</span></div><div><span style=3D"font-family:monospace"><br></span></div><d=
iv><div><span style=3D"font-family:monospace">=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<br></span></div><div><span style=3D"font-fam=
ily:monospace"><br></span></div><div><span style=3D"font-family:monospace">=
<br></span></div><div><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-=
size:12px"><span style=3D"font-family:monospace">Paul Romer=C2=A0<br><a hre=
f=3D"mailto:[email protected]" style=3D"color:rgb(17,85,204)" target=3D"_b=
lank">[email protected]</a>=C2=A0|=C2=A0<a href=3D"http://paulromer.net/" =
style=3D"color:rgb(17,85,204)" target=3D"_blank">paulromer.net</a>=C2=A0|=
=C2=A0<a href=3D"https://twitter.com/paulmromer?ref_src=3Dtwsrc%5Egoogle%7C=
twcamp%5Eserp%7Ctwgr%5Eauthor" style=3D"color:rgb(17,85,204)" target=3D"_bl=
ank">@paulromer</a></span></div><div style=3D"font-size:12px"><span style=
=3D"font-family:monospace"><br></span></div></div></div></div></div></div><=
/div>
_______________________________________________<br>Pythonmac-SIG maillist =
=C2=A0- =C2=A0<a href=3D"mailto:[email protected]" target=3D"_blank"=
>[email protected]</a><br><a href=3D"https://mail.python.org/mailman=
/listinfo/pythonmac-sig" target=3D"_blank">https://mail.python.org/mailman/=
listinfo/pythonmac-sig</a><br>unsubscribe: <a href=3D"https://mail.python.o=
rg/mailman/options/Pythonmac-SIG" target=3D"_blank">https://mail.python.org=
/mailman/options/Pythonmac-SIG</a><br></div></blockquote></div><br></div>__=
_____________________________________________<br>
Pythonmac-SIG maillist=C2=A0 -=C2=A0 <a href=3D"mailto:Pythonmac-SIG@python=
.org" target=3D"_blank">[email protected]</a><br>
<a href=3D"https://mail.python.org/mailman/listinfo/pythonmac-sig" rel=3D"n=
oreferrer" target=3D"_blank">https://mail.python.org/mailman/listinfo/pytho=
nmac-sig</a><br>
unsubscribe: <a href=3D"https://mail.python.org/mailman/options/Pythonmac-S=
IG" rel=3D"noreferrer" target=3D"_blank">https://mail.python.org/mailman/op=
tions/Pythonmac-SIG</a><br>
</blockquote></div><br clear=3D"all"><div><br></div>-- <br><div dir=3D"ltr"=
 class=3D"gmail_signature"><div dir=3D"ltr">Christopher Barker, PhD (Chris)=
<br><br> Python Language Consulting<br>=C2=A0 - Teaching<br>=C2=A0 - Scient=
ific Software Development<br>=C2=A0 - Desktop GUI and Web Development<br>=
=C2=A0 - wxPython, numpy, scipy, Cython<br></div></div>

--00000000000001e57505d0c35409--

--===============4911205781155904835==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Pythonmac-SIG maillist  -  [email protected]
https://mail.python.org/mailman/listinfo/pythonmac-sig
unsubscribe: https://mail.python.org/mailman/options/Pythonmac-SIG

--===============4911205781155904835==--