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__)