【问题标题】:Compiling Python3.5 on RedHat 6.4 - missing tkinter在 RedHat 6.4 上编译 Python3.5 - 缺少 tkinter
【发布时间】:2016-06-12 18:42:20
【问题描述】:

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

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

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

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

感谢您的帮助。

【问题讨论】:

  • 安装tk-devel 有帮助吗?
  • 一般来说,在 Linux 上构建 python 需要单独安装 tcl/tk,有时还需要为 tkinter/idle/turtle 安装单独的 python-tkinter 包。详细信息取决于 linux 发行商,也可能取决于版本。如果 Chris 的回答不起作用,请尝试寻找 python-devel 或 *devel。如果您在此处得到 RH 6.4 答案,请尝试使用 RedHat 列表或 python-list,后者可通过 news.gmane.org 访问。
  • 大家好,很抱歉回复晚了。这是一个虚拟机,所以我回滚到快照并从头开始。 Chris 的建议很好,现在我没有收到 tkInter 缺失异常,但还是有问题。
  • 这就是现在的样子。没有关于它为什么失败的明确消息(我只是在我得到错误之前粘贴最后一行):“gcc -pthread -shared build/temp.linux-x86_64-3.5/tmp/PYTHON/Python-3.5.1 /Modules/_ctypes/_ctypes.o build/temp.linux-x86_64-3.5/tmp/PYTHON/Python-3.5.1/Modules/_ctypes/callbacks.o build/temp.linux-x86_64-3.5/tmp/PYTHON/Python -3.5.1/Modules/_ctypes/callproc.o build/temp.linux-x86_64-3.5/tmp/PYTHON/Python-3.5.1/Modules/_ctypes/stgdict.o build/temp.linux-x86_64-3.5/tmp /PYTHON/Python-3.5.1/Modules/_ctypes/cfield.o ...
  • build/temp.linux-x86_64-3.5/tmp/PYTHON/Python-3.5.1/Modules/_ctypes/libffi/src/prep_cif.o build/temp.linux-x86_64-3.5/tmp /PYTHON/Python-3.5.1/Modules/_ctypes/libffi/src/closures.o build/temp.linux-x86_64-3.5/tmp/PYTHON/Python-3.5.1/Modules/_ctypes/libffi/src/x86/ ffi64.o build/temp.linux-x86_64-3.5/tmp/PYTHON/Python-3.5.1/Modules/_ctypes/libffi/src/x86/unix64.o build/temp.linux-x86_64-3.5/tmp/PYTHON/ Python-3.5.1/Modules/_ctypes/libffi/src/x86/ffi.o build/temp.linux-x86_64-3.5/tmp/PYTHON/Python-3.5.1/Modules/_ctypes/libffi/src/x86/sysv .o -L/usr/local/lib -o ...

标签: python tkinter redhat zlib binascii


【解决方案1】:

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

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

从这里下载tcltksrc.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多