python3.6 _tkinter module問題 python源碼重新編譯


python3.6的坑踩不完
現在一般都是python3.6.5
當時安裝的是python3.6.4 安裝tkinter的問題:
對於python3.6.4 直接

sudo apt-get install python3.6-tk    #安裝的是python3.6.5適配的tk版本,不知道是不是不兼容的問題,反正我的報錯

https://tkdocs.com/tutorial/install.html
首先安裝activateTcl
https://www.activestate.com/
從官網上下載源碼
https://www.activestate.com/activetcl/downloads/thank-you?dl=http://downloads.activestate.com/ActiveTcl/releases/8.6.6.8606/ActiveTcl-8.6.6.8606-x86_64-linux-glibc-2.5-401948.tar.gz
現在嘗試源碼重新編譯,來源於TkDocs

sudo sh install.sh
./configure --prefix=/usr/local/  --with-tcltk-includes='-I/opt/ActiveTcl-8.6/include' 
       --with-tcltk-libs='/opt/ActiveTcl-8.6/lib/libtcl8.6.so /opt/ActiveTcl-8.6/lib/libtk8.6.so' # 注意修改自己之前的編譯的環境 ,這里的安裝位置和自己要求的安裝位置相同
sudo make
sudo make install

不成功,檢查

touch Modules/_tkinter.c
make

不成功,這里基本上是因為頭文件都在/usr/include/tcl文件當中,但是在編譯文件當中都是直接從include中查找,所以更改相對路徑。
make 成功
然后sudo make install

后續修改方法,找到了源碼文檔中Modules/Setup.dist文件
修改里面的注釋段

# *** Always uncomment this (leave the leading underscore in!):
         _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT \           #去掉注釋
        # *** Uncomment and edit to reflect where your Tcl/Tk libraries are:
            -L/usr/local/lib \                                      #去掉注釋
        # *** Uncomment and edit to reflect where your Tcl/Tk headers are:
        #   -I/usr/local/include \
        # *** Uncomment and edit to reflect where your X11 header files are:
            -I/usr/X11R6/include \                                  #去掉注釋
        # *** Or uncomment this for Solaris:
        #   -I/usr/openwin/include \
        # *** Uncomment and edit for Tix extension only:
        #   -DWITH_TIX -ltix8.1.8.2 \
        # *** Uncomment and edit for BLT extension only:
        #   -DWITH_BLT -I/usr/local/blt/blt8.0-unoff/include -lBLT8.0 \
        # *** Uncomment and edit for PIL (TkImaging) extension only:
        #     (See http://www.pythonware.com/products/pil/ for more info)
        #   -DWITH_PIL -I../Extensions/Imaging/libImaging  tkImaging.c \
        # *** Uncomment and edit for TOGL extension only:
        #   -DWITH_TOGL togl.c \
        # *** Uncomment and edit to reflect your Tcl/Tk versions:
            -ltk8.2 -ltcl8.2 \                                  #去掉注釋,並改成相應的版本,如我的是8.6,就寫-ltk8.6 -ltcl8.6 \
        # *** Uncomment and edit to reflect where your X11 libraries are:
        #   -L/usr/X11R6/lib \
        # *** Or uncomment this for Solaris:
        #   -L/usr/openwin/lib \
        # *** Uncomment these for TOGL extension only:
        #   -lGL -lGLU -lXext -lXmu \
        # *** Uncomment for AIX:
        #   -lld \
        # *** Always uncomment this; X11 libraries to link with:
            -lX11                                               #去掉注釋

測試成功,之前的錯誤的主要原因在於源碼的編譯環境的問題,注意之前python的安裝路徑是/usr/local/ ,后面的lib/python3.6是自動生成的,其實我這邊prefix沒必要更改,我看了一下configure文件,里面的默認位置就是/usr/local
這里import _tkinter 主要不成功是由於系統的路徑的原因,只要是生成了動態鏈接庫,在python的sys.path下面就可以找到。tcl的官方教程還是比較靠譜的,我感覺應該是那里解決了我的問題,因為開始的時候我touch Modules/_tkinter.c再編譯的時候就有報錯,找不到頭文件的位置,修改了相對路徑之后才make成功的,所以源碼編譯這個環節很重要。給后面的人踩坑小提示。好像說后面的python版本都不集成tcl和tk,所以源碼自行編譯還是挺重要滴。

這里附錄python查找module的目錄的位置:

import module
print(module.__file__)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM