pyenv安装python3.11, 默认是不带tkinter模块的, 于是尝试指定tkinter给安装过程.
遇到的坑是brew默认安装的tcl-tk是9.0, 带命令行安装会报错, 而使用tcl-tk@8则可以
失败的命令行
TCLTK_PREFIX=$(brew --prefix tcl-tk) \
PATH="$TCLTK_PREFIX/bin:$PATH" \
LDFLAGS="-L$TCLTK_PREFIX/lib" \
CPPFLAGS="-I$TCLTK_PREFIX/include" \
PKG_CONFIG_PATH="$TCLTK_PREFIX/lib/pkgconfig" \
TCL_CONFIG="$TCLTK_PREFIX/lib/tclConfig.sh" \
TK_CONFIG="$TCLTK_PREFIX/lib/tkConfig.sh" \
PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I$TCLTK_PREFIX/include' --with-tcltk-libs='-L$TCLTK_PREFIX/lib -ltcl9.0 -ltcl9tk9.0'" \
pyenv install 3.11.14
成功的命令行
brew install tcl-tk@8
TCLTK_PREFIX=$(brew --prefix tcl-tk@8) \
PATH="$TCLTK_PREFIX/bin:$PATH" \
LDFLAGS="-L$TCLTK_PREFIX/lib" \
CPPFLAGS="-I$TCLTK_PREFIX/include" \
PKG_CONFIG_PATH="$TCLTK_PREFIX/lib/pkgconfig" \
TCL_CONFIG="$TCLTK_PREFIX/lib/tclConfig.sh" \
TK_CONFIG="$TCLTK_PREFIX/lib/tkConfig.sh" \
PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I$TCLTK_PREFIX/include' --with-tcltk-libs='-L$TCLTK_PREFIX/lib -ltcl8.6 -ltk8.6'" \
pyenv install 3.11.14
上面是安装python3.11的情况, 然而再次尝试安装python3.10, 会发现上面这种方法又不行了
Traceback (most recent call last):
File "/Users/aaa/.pyenv/versions/3.10.19/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/Users/aaa/.pyenv/versions/3.10.19/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/Users/aaa/.pyenv/versions/3.10.19/lib/python3.10/tkinter/__main__.py", line 7, in <module>
main()
File "/Users/aaa/.pyenv/versions/3.10.19/lib/python3.10/tkinter/__init__.py", line 4596, in _test
root = Tk()
File "/Users/aaa/.pyenv/versions/3.10.19/lib/python3.10/tkinter/__init__.py", line 2301, in __init__
self._loadtk()
File "/Users/aaa/.pyenv/versions/3.10.19/lib/python3.10/tkinter/__init__.py", line 2317, in _loadtk
raise RuntimeError("tk.h version (%s) doesn't match libtk.a version (%s)"
RuntimeError: tk.h version (8.5) doesn't match libtk.a version (8.6)
反而直接pyenv install 3.10, 就直接带上tkinter
莫名其妙