2019年3月23日土曜日

pyhtonのTkinterは、一つのバージョンでしか使えないのか?


パイソンのバージョン違いでTkinterがtkinterか変わるのは、
しょうがないにしても!


pyhton2系ではTkinterで、3系では、tkinterである
最初のTが大文字と小文字の違いがある。
インポートするときには間違えないよいうにしなければいけない。


python2のソースでは、

  • import Tkinter
  • root = Tkinter.Tk()
  • root.mainloop()




python3のソースでは、

  • import tkinter
  • root = tkinter.Tk()
  • root.mainloop()

python3では、tkinterがインポートできる
root@localhost:~# python
Python 3.6.3 (default, Oct  6 2017, 00:00:00)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
>>>


python2では、Tkinterがインポートできない
root@localhost:~# python2
Python 2.7.12 (default, Jul 18 2016, 15:02:52)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 42, in <module>
    raise ImportError, str(msg) + ', please install the python-tk package'
ImportError: No module named _tkinter, please install the python-tk package
>>> import tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named tkinter

ので、apt install python-tk
root@localhost:~# apt install python-tk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
  tix python-tk-dbg
以下のパッケージは「削除」されます:
  blt python3-tk
以下のパッケージが新たにインストールされます:
  python-tk
アップグレード: 0 個、新規インストール: 1 個、削除: 2 個、保留: 137 個。
23.6 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に 175 kB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 170471 個のファイルとディレクトリがインストールされています。)
python3-tk:amd64 (3.6.3-0ubuntu1~14.04.york0) を削除しています ...
blt (2.5.3+dfsg-3~14.04.york1) を削除しています ...
以前に未選択のパッケージ python-tk を選択しています。
(データベースを読み込んでいます ... 現在 170463 個のファイルとディレクトリがインストールされています。)
.../python-tk_2.7.5-1ubuntu1_amd64.deb を展開する準備をしています ...
python-tk (2.7.5-1ubuntu1) を展開しています...
python-tk (2.7.5-1ubuntu1) を設定しています ...
root@localhost:~# python2 -m Tkinter
Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 3860, in <module>
    _test()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 3835, in _test
    root = Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1818, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable



root@localhost:~# python -m Tkinter
/usr/bin/python: No module named Tkinter


root@localhost:~# python -m tkinter
Traceback (most recent call last):
  File "/usr/lib/python3.6/tkinter/__init__.py", line 37, in <module>
    import _tkinter
ModuleNotFoundError: No module named '_tkinter'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.6/runpy.py", line 142, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/usr/lib/python3.6/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "/usr/lib/python3.6/tkinter/__init__.py", line 39, in <module>
    raise ImportError(str(msg) + ', please install the python3-tk package')
ImportError: No module named '_tkinter', please install the python3-tk package
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 20, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "/usr/lib/python3.6/tkinter/__init__.py", line 37, in <module>
    import _tkinter
ModuleNotFoundError: No module named '_tkinter'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.6/runpy.py", line 142, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/usr/lib/python3.6/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "/usr/lib/python3.6/tkinter/__init__.py", line 39, in <module>
    raise ImportError(str(msg) + ', please install the python3-tk package')
ImportError: No module named '_tkinter', please install the python3-tk package
root@localhost:~#

となり、pyhton2とpyhton3では、tkinter(Tkinter)が共存できない!

apt-get install python3-tk


だとpyhton3では、動くようになる。
※(DISPLAYは、vncで対応しますので。。。)

自分の環境だけなのかな~

パイソンでバージョンが、ごちゃごちゃに!

パイソンでバージョンが、ごちゃごちゃに!

自分の環境は、ubuntuでDTIのVPSを利用しています。
安くて中々気に入っています。

宣伝する気はありませんがこちらです!
DTIのServersMan@vps
月額350円は遊ぶには持って来いだね!

パイソンデバッガーを公開しているのですが、そこのデバックターゲットの
バージョンが、pyhton3.6なもんで大変だった。


初期時は、ver2.7 とver3.4だったと記憶していたが、

pipでインストールするときには、こんな感じでやっていました!

python3.6 -m pip install インストールしたいもの

何が何だか分からなくなったので、
python3.x  -m pip install --upgrade pip
pipもアップグレード



因みに以下のように、バージョンによってインストールされる場所が違う
python 2.6, 2.7
apt-getでインストール
 /usr/lib/python2.X/dist-packages
easy_installでインストール
 /usr/local/lib/python2.X/dist-packages
ローカルでインストール
 /usr/local/lib/python2.X/site-packages
python 3
apt-getでインストール
 /usr/lib/python3/dist-packages
easy_installでインストール
 /usr/lib/python3/dist-packages
ローカルでインストール
 /usr/local/lib/python3/site-packages



でも、この解決策が一番いいなと思い今は、少し落ち着いたです。
解決策1
python2系は、まだ色々なライブラリーがあり便利そうだがメインにしない
つまりpyhtonと入力するとpyhton3が起動する、2系を使いたい時は
「python2」と明示的にする。

解決策2
これは、ずぼらの自分の所為なのだが
python3を起動すると、最新のバージョンが起動するようにした。


シンボリックリンクなので、こんな感じで変更した。
rm /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python

確認checkです。
root@localhost:~# which python
root@localhost:~# ls -l /usr/bin/python
lrwxrwxrwx 1 root root 16  3月 23 17:02 /usr/bin/python -> /usr/bin/python3

python3系にwxpythonをインストール (エラーあり-の, 終わらないし)


python3系にwxpythonをインストール


自分は、ServersMan@VPSなので、GUI環境ではない。

バージョン確認
root@localhost:~# cat /etc/issue
Ubuntu 14.04.5 LTS \n \l

64bitです(32bitはi686と表示らしい)
root@localhost:~# arch
x86_64


なので色々と大変だった。
GUI関係がインストールされていないのである、
以下をインストールしたらエラーがなくなった。
GTK+
OpenGL
GStreamer
webkit


python3.6  -m pip install wxpython
で実行したが、なかなか終わらない?
(ループしているようだったが、調べるとかなり時間がかかるらしい「数時間から日レベル」)

途中でキャンセルした。


python3.6  -m pip install wxpython
Collecting wxpython
  Using cached https://files.pythonhosted.org/packages/17/74/7c3ced03c3c76b9f98e4a0edae1801755a7599ebf481c04d9f77dfff17e3/wxPython-4.0.4.tar.gz
Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from wxpython) (1.11.0)
Requirement already satisfied: Pillow in /usr/local/lib/python3.6/dist-packages (from wxpython) (5.4.1)
Building wheels for collected packages: wxpython
  Building wheel for wxpython (setup.py) ... /^canceled
Operation cancelled by user

そこで、ネット上のwheel を利用して再インストールしてみた。
https://extras.wxpython.org/wxPython4/extras/
から、linux->gtk3->ubuntu14.04
と自分の必要とするものを探して利用しますよ。


python3.6  -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-14.04/wxPython-4.0.2-cp36-cp36m-linux_x86_64.whl
Collecting wxPython==4.0.2 from https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-14.04/wxPython-4.0.2-cp36-cp36m-linux_x86_64.whl
  Downloading https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-14.04/wxPython-4.0.2-cp36-cp36m-linux_x86_64.whl (142.9MB)
    100% |????????????????????????????????| 143.0MB 28kB/s
Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from wxPython==4.0.2) (1.11.0)
Collecting PyPubSub (from wxPython==4.0.2)
  Downloading https://files.pythonhosted.org/packages/1a/41/a0aceb552d8ec63bb1e8223d130f9dd0f736470036d75d708183b104a2cb/Pypubsub-4.0.3-py3-none-any.whl (61kB)
    100% |????????????????????????????????| 61kB 109kB/s
Installing collected packages: PyPubSub, wxPython
Successfully installed PyPubSub-4.0.3 wxPython-4.0.2



間違えた場合は、こんな感じ(like this)
cp35はヴァージョンpyhton3.5でした、自分はpython3.6なので、cp36
その他OSのバージョンなどを注意深く確認する必要がありますね!

wxPython-4.0.0a3.dev3059+4a5c5d9-cp35-cp35m-linux_x86_64.whl is not a supported wheel on this platform.


参考URL
Ubuntu 16.04 に wxPython (Python3用) をインストール
ubuntu16.04のpython3にwxpythonをインストールする