在RedHat 6.4上编译Python3.5 - 缺少tkinter

时间:2016-02-29 16:21:35

标签: python tkinter redhat zlib binascii

在尝试从redhat 6上的源代码编译新Python时,有没有人遇到过丢失tkInter的问题?

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

这是一家公司内部机器。我可以访问yum,但就是这样。 Yum只找到与系统Python相关的tkInter版本,即2.6.6。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

要使用python构建tkinter,您需要先安装tcltk。我使用gccg++构建所有内容。

从此处下载tcltk src.tar.gz(确保tcltk具有相同版本):https://www.tcl.tk/software/tcltk/download.html

# 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(下载源here)。我们必须指定tcltk的安装位置(在下面的代码中编辑版本)。另外,在调用make之前,我们需要指定tcltk的标头在哪里。

# 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

要在tkinter中使用python二进制文件并避免显示消息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