WSLのpython3.6でapt_pkgがないとか言われる話

はじめに

  • 課外活動でpython3.6 + Opencv3.2 を使う機会があった
  • import cv2は普通に動作したが、関数呼び出し時にエラーが出た

エラー

$ python3.6 demoOpenCV.py
OpenCV(3.4.1) Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /io/opencv/modules/highgui/src/window.cpp, line 356
Traceback (most recent call last):
  File "demoOpenCV.py", line 4, in <module>
    cv2.imshow('img',img)
cv2.error: OpenCV(3.4.1) /io/opencv/modules/highgui/src/window.cpp:356: error: (-215) size.width>0 && size.height>0 in function imshow

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 23, 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 "demoOpenCV.py", line 4, in <module>
    cv2.imshow('img',img)
cv2.error: OpenCV(3.4.1) /io/opencv/modules/highgui/src/window.cpp:356: error: (-215) size.width>0 && size.height>0 in function imshow
  • ModuleNotFoundError: No module named 'apt_pkg' を解決すれば良さげ

解決

stackoverflow

cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so

すると動く、ということで実行してみると

  • apt_pkg.cpython-34m-i386-linux-gnu.soはなかった
  • ls で確認すると apt_pkg.cpython-35m-x86_64-linux-gnu.so というよく似た名前があった
  • こいつをcpしてプログラムを動作させた
$ python3.6 demoOpenCV.py
: cannot connect to X server
  • エラーが変わってX server を入れたら良さげ

X server

  • Xmingを入れた
  • 起動後ターミナル内で export DISPLAY=:0.0 を入力
  • その後、プログラムを動作させると無事動いた

終わりに

  • 色々なサイトを眺めたので一つにまとめた
  • 他のエラーが出ないことを祈る