News for hackers. Stuff that matters.
Re:Pyenv – lets you easily switch between multiple versions ... by rcarmo on Monday March 25, 2024 @06:52AM (#39814649)
Actually, it only builds it locally if it can't find a pre-packaged version for your system/arch. Admittedly that's most of the recent ones on a Mac, but there is a difference (I've been using pyenv for nearly ten years[1] now).

The big advantage for me is that I can match whatever runtime and standard library a target has (and yes, that's needed more times than not, even in this new age of Docker).

Additionally, you can build an _optimized_ Python. I have this set for my builds:

    env PYTHON_CONFIGURE_OPTS='--enable-optimizations --with-lto' PYTHON_CFLAGS='-march=native -mtune=native' pyenv install 3.12.2
[1]: https://taoofmac.com/space/blog/2015/10/03/1245
Re:Pyenv – lets you easily switch between multiple versions ... by BiteCode_dev on Monday March 25, 2024 @07:50AM (#39815118)
That happens way more often than people want to admit, and I think it's not genuine to present the tool that way.

E.G, I'm on Ubuntu 20.04 on an Dell XPS, a fairly standard machine, I'll get:

    pyenv install 3.9 -v
    /tmp/python-build.20240325124651.73089 ~
    Downloading Python-3.9.19.tar.xz...
    -> https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tar.xz
    ...
    LD_LIBRARY_PATH=/tmp/python-build.20240325124651.73089/Python-3.9.19 CC='gcc -pthread' LDSHARED='gcc -pthread -shared -L/home/user/.pyenv/versions/3.9.19/lib -Wl,-rpath,/home/user/.pyenv/versions/3.9.19/lib -L/home/user/.pyenv/versions/3.9.19/lib -Wl,-rpath,/home/user/.pyenv/versions/3.9.19/lib  ' OPT='-DNDEBUG -g -fwrapv -O3 -Wall'  _TCLTK_INCLUDES='' _TCLTK_LIBS=''  ./python -E ./setup.py  build
    running build
    running build_ext
    ... etc
There are obviously binaries for this Python, since I can apt install it and I didn't specify the minor version.

But by default it downloads the source, and compiles it.

On top of that it will use a shim which comes with its own world of possible pain.

Again, I don't want to bash on pyenv.

But I do want to lower people's expectations.

It's a tool for experts, not beginners.

Re:Pyenv – lets you easily switch between multiple versions ... by orf on Monday March 25, 2024 @10:17AM (#39816639)
I’ve quite literally never seen it download a pre-compiled Python - I didn’t actually know it had that functionality, and have been using it for probably a decade.
Re:Pyenv – lets you easily switch between multiple versions ... by cqqxo4zV46cp on Monday March 25, 2024 @11:17AM (#39817388)
Ditto. I had no idea that it ever looked for a pre-compiled version.
Re:Pyenv – lets you easily switch between multiple versions ... by ejj28 on Monday March 25, 2024 @10:52AM (#39817066)
Actually, I'm pretty sure that binaries for Python 3.9 aren't available on Ubuntu 20.04 without adding an apt repository to get them from, so your statement that you "can apt install it" isn't entirely correct in this case - by default, binaries aren't available, and therefore pyenv has to compile Python 3.9.
Re:Pyenv – lets you easily switch between multiple versions ... by BiteCode_dev on Monday March 25, 2024 @01:13PM (#39818834)
Just tried, I get the same result with 3.7, 3.8, 3.10 and 3.11.
Re:Pyenv – lets you easily switch between multiple versions ... by notatallshaw on Monday March 25, 2024 @11:23AM (#39817467)
> Actually, it only builds it locally if it can't find a pre-packaged version for your system/arch. Admittedly that's most of the recent ones on a Mac, but there is a difference (I've been using pyenv for nearly ten years[1] now).

Really? I regularly use this on Linux exactly because it compiles from source rather than using the system provided Python which often have patches in them that breaks pip's test suite.

I've never encountered it trying to use the system provided Python, but maybe there's a weird quirk in the way I am using it.

Re:Pyenv – lets you easily switch between multiple versions ... by strangelove026 on Monday March 25, 2024 @11:49AM (#39817846)
Currently going through this myself on a new mac I bought lol. Still haven't gotten anywhere. Oh well

$ PYTHON_CONFIGURE_OPTS='--disable-ipv6 --enable-optimizations --with-lto' PYTHON_CFLAGS='-march=native -mtune=native' pyenv install 3.12.2 python-build: use openssl@3 from homebrew python-build: use readline from homebrew Downloading Python-3.12.2.tar.xz... -> https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.x... Installing Python-3.12.2... python-build: use readline from homebrew python-build: use ncurses from homebrew python-build: use zlib from xcode sdk

BUILD FAILED (OS X 14.4 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/w9/xvxzj68j6kx7m480rnwq6hvh0000gn/T/python-build.20240325114837.43577 Results logged to /var/folders/w9/xvxzj68j6kx7m480rnwq6hvh0000gn/T/python-build.20240325114837.43577.log

Last 10 log lines: ./Include/internal/pycore_interp.h:193:24: error: field has incomplete type 'struct _dtoa_state' struct _dtoa_state dtoa; ^ ./Include/internal/pycore_interp.h:193:12: note: forward declaration of 'struct _dtoa_state' struct _dtoa_state dtoa; ^ 1 error generated. make[2]: ** [Objects/boolobject.o] Error 1 make[1]: ** [profile-gen-stamp] Error 2 make: ** [profile-run-stamp] Error 2

Re:Pyenv – lets you easily switch between multiple versions ... by strangelove026 on Monday March 25, 2024 @02:03PM (#39819446)
Actually, I installed rye and got everything working. There goes any usage of pyenv going forward lol.
Re:Pyenv – lets you easily switch between multiple versions ... by hot_gril on Tuesday March 26, 2024 @04:00PM (#39832189)

  PYTHON_CONFIGURE_OPTS='--disable-ipv6
LOL, the strategy of disabling ipv6 even finds its way into Python builds