1

尝试在 redhat 6 上从源代码编译新 Python 时,你们中是否有人遇到过缺少 tkInter 的问题?

“未找到构建这些可选模块的必要位:_tkinter 要找到必要的位,请在 setup.py 中的 detect_modules() 中查找模块名称。无法构建这些模块:binascii zlib”

是公司内部机。我可以访问 yum,但仅此而已。Yum 只找到与系统 Python 相关的 tkInter 版本,即 2.6.6。

我可能在这里缺少任何 tkInter 依赖项吗?列表更长,但安装几个库有帮助。我仍然坚持最后一个并且没有想法。

我感谢您的帮助。

4

1 回答 1

0

在公司机器上,最简单的方法(如果您没有权限)是进行自定义构建。

为了使用 构建pythontkinter您需要先安装tcltkgcc我用and构建一切g++

从这里下载tcl和(tk src.tar.gz确保版本相同):https ://www.tcl.tk/software/tcltk/download.htmltcltk

# Unpack tcl
mkdir tcl_install
tar -zxvf tcl* --directory tcl_install

# configure
# say the absolute path where you want to install tcl is saved in INSTALLDIR_TCL
mkdir $INSTALLDIR_TCL # our install folder
cd tcl_install/*/unix
./configure --prefix=$INSTALLDIR_TCL CC=gcc CXX=g++ --enable-threads --enable-shared

# make install
make
make install

# cleanup
rm -rf tcl_install

和同样的事情tk,但这次指定你安装的位置tcl

# Unpack tk
mkdir tk_install
tar -zxvf tk* --directory tk_install

# configure
# say the absolute path where you want to install tcl is saved in INSTALLDIR_TK
mkdir $INSTALLDIR_TK # our install folder
cd tk_install/*/unix
./configure --prefix=$INSTALLDIR_TK --with-tcl=$INSTALLDIR_TCL/lib CC=gcc CXX=g++ --enable-threads --enable-shared

# make install
make
make install

# cleanup
rm -rf tk_install

现在我们构建python(在此处下载源代码)。我们必须指定安装位置(在下面的代码中编辑版本)tcltk此外,在调用 之前make,我们需要指定 和 的标头在tcl哪里tk

# Unpack python
mkdir python_install
tar -zxvf Python* --directory python_install

# configure
# say the absolute path where you want to install tcl is saved in INSTALLDIR_PYTHON
mkdir $INSTALLDIR_PYTHON # our install folder
cd python_install
./configure --prefix=$INSTALLDIR_PYTHON CC=gcc CXX=g++ --with-tcltk-includes="-I$INSTALLDIR_TCL/include -I$INSTLLDIR_TK/include" --with-tcltk-libs="$INSTALLDIR_TCL/lib/libtcl8.6.so $INSTALLDIR_TK/lib/libtk8.6.so"

# make install
export CPPFLAGS="-I$INSTALLDIR_TCL/include -I$INSTALLDIR_TK/include" 
make
make install

# cleanup
rm -rf python_install

最后,将tcltk库文件夹复制到python/lib

# copy tcl tk libs to python
cp -r tcl/lib/tcl8.6/ python/lib
cp -r tk/lib/tk8.6/ python/lib

要使用 python 二进制文件tkinter并避免 message cannot import tkinter,您必须LD_LIBRARY_PATH在启动应用程序之前导出:

export LD_LIBRARY_PATH=/path_to_your_python/python/tcl/lib:/path_to_your_python/python/tk/lib:$LD_LIBRARY_PATH
/path_to_your_python/python/bin/python3.7 your_app.py # or wathever your python binary is
于 2019-07-05T15:41:39.547 回答