がちおの書き残し

いろいろ自分のやった事について書き残していってるモノです。

Ubuntu16.04にてpythonのtkinterを導入した時に躓いた時のメモ書き

初めて書くので、見難いかもしれませんが、ご承知おきを。

 

 

今回、WindowsUbuntuの2つの環境でpythonを使ってGUIの何かしらを作りたいなぁと思った時につまづいた事です。

pythonGUIの何かしらを作るときに自分は「tkinter」というのを使いました。

 

これは、windowsだとpythonインストールする時に、一緒にインストールしてくれるやつらしいですね。

 

しかし、自分はUbuntuに「tkinter」が入ってなくて、

いざ、インストール!!って時につまずいたので、メモ書きを残します。

 

自分の環境(Ubuntu16.04)ではpyenvでpythonの複数のバージョンを混在させていました。

で、流れとしてはとりあえず

sudo apt-get -y install python3-tk tk-dev

を実行して、インストールします。

自分の環境では、python3を使用しているので、「python3-tk」をインストールしていますが、

「python2.x」の場合は、たぶん「python-tk」になると思われます。(自分は試していません。)

 

※importする際は

※python2.x系はimport Tkinter

※python3.x系はimport tkinter

※になるらしいです。

 

で、このままpythonで、いざ

import tkinter

って打ちこんでみると、

>>> import tkinter

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/hogehoge/.pyenv/versions/3.6.5/lib/python3.6/tkinter/__init__.py", line 36, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'

って言われてしまいました。

なんか、うまくライブラリが結びついてないみたいな感じらしい。

なので、めんどくさいかもしれませんが、

pyenv uninstall x.x.x

で一旦pyenvでインストールしたpythonのバージョンを削除してから

再び

pyenv install x.x.x

でインストールし直したら、importできるようになっていました!!!

 

※pyenvはpythonのバージョンを複数混在してくれる奴です。

※ここでは詳細は省きます。pyenvってググれば出てくると思います。

 

で、アンインストールする時に気をつけないといけないのが、

一旦バージョンを他のものに切り替えてから、削除したほうがいいかもしれません。

つまり、

python 2.7と3.6を入れていたとして、2.7を削除するってなったら、一旦バージョンを3.6に切り替えてから、2.7を削除刷るみたいな感じ??

とりあえずこれで、importできるようになりました。

で、もう一点気をつけたほうがいい事がある。

それは、pyenv使ってたら、pythonのバージョンを消すと、

そのバージョンで使っていたpipでインストールしたパッケージとかも

全部消えてしまうということ。

 

なので、削除刷る前に、

pip list --format=columns | awk 'NR>2{print $1;}' > pip_list

で、パッケージリストのバックアップを取ってたらいいと思う。

で、pythonを再インストールしたら、

pip install --upgrade -r pip_list

でインストールしたらいいと思う。(--upgradeは個人的に好きなので付けてるだけ。)

 

ちなみに上のpip listのコマンドは、

pipでインストールしたものを、指定したフォーマットにしたがってリスト表示してくれるやつで、

その中で、必要なものをawkで抜き出してる感じ??

awkのNRは行数を表していて、2行目までは不必要な文言が入ってるので

それ以降の必要な部分だけ抜き出してます。

print $1で、1列目を抜き出してます。

 

 

そんな感じかな??