質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2120閲覧

WSLでbrewを使用しpysimpleguiのデスクトップアプリを実行したい。

dendenmushi

総合スコア98

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/17 14:16

編集2021/07/17 14:19

前提・実現したいこと

元々の目的はデスクトップアプリで簡単にOCRできるアプリを作りたい。でしたが、別のさらに気になる点が出ました。それはよくある参考先URLの環境がMACやLinuxであるときの簡単な解消法がないかです。

元の目的(OCRデスクトップアプリ実装

問題点

参照先URLではbrewを利用しており、その方法で環境を整えWSLによって実行した際に下記エラーが起きていること。

行ったこと

WSLを利用してwindowsの特定フォルダにMacやLinux環境作成
(WSLのデメリットはGPUなどに接続はできないことで、今回はそこまでの使い方はしないため問題なしと判断しました。)

スタート環境

windows10 pro 64bit

具体的手順

WSLをインストールする
②powershellでバージョン確認

powershell

1PS C:\Users\User> wsl -l -v 2 NAME STATE VERSION 3* Ubuntu Running 1

③windowsマーク+S → WSL入力しEnter
イメージ説明
④作業ディレクトリ作成と移動

cd ../../work/
mkdir jatoen_display
cd jatoen_display
pwd

イメージ説明
⑤各種基礎toolインストール

pip install pysimplegui

◇問題発生1:Command 'pip' not found, but there are 18 similar ones.
◇対策1-1:Stackoverflow Ubuntu Command 'pip' not found, but there are 18 similar ones [closed]

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
pip install pysimplegui

brew install tesseract

◇問題発生2:Command 'brew' not found
◇対策2-1:brew|command not foundコマンドが見つかりませんの対処

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

brew -v → brew: command not found

◇対策2-2:Homebrew をインストールしたはずなのにbash: brew: command not foundになる。

echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
brew -v

イメージ説明

brew install tesseract
sudo pip3 install pyocr
sudo pip3 install pillow
brew install python3

イメージ説明

brew upgrade python

イメージ説明

⑥ソースコード記述
同階層に以下作成
jatoen_display.py

python

1# https://qiita.com/yamacs/items/cebb34227ad7373e9e3b 2import os 3import sys 4from PIL import Image 5 6import PySimpleGUI as sg 7import pyocr 8import pyocr.builders 9 10 11def scan_file_to_str(file_path, langage): 12 """read_file_to_str 13 14 画像ファイルから文字列を生成する 15 16 Args: 17 file_path(str): 読み取るファイルのパス 18 langage(str): 'jpn' または 'eng' 19 20 Returns: 21 読み取った文字列 22 """ 23 tools = pyocr.get_available_tools() 24 if len(tools) == 0: 25 print("No OCR tool found") 26 sys.exit(1) 27 28 tool = tools[0] 29 30 text = tool.image_to_string( 31 Image.open(file_path), 32 lang=langage, 33 builder=pyocr.builders.TextBuilder(tesseract_layout=6) 34 ) 35 return text 36 37 38# テーマを設定 39sg.theme('Light Grey1') 40 41layout = [ 42 # 1行目 43 [sg.Text('読み取るファイル(複数選択可)', font=('IPAゴシック', 16))], 44 # 2行目 45 [sg.InputText(font=('IPAゴシック', 14), size=(70, 10),), sg.FilesBrowse('ファイルを選択', key='-FILES-'),], 46 # 3行目 47 [sg.Text('読み取る言語', font=('IPAゴシック', 16)), 48 sg.Radio('日本語', 1, key='-jpn-', font=('IPAゴシック', 10)), 49 sg.Radio('英語', 1, key='-eng-', font=('IPAゴシック', 10))], 50 # 4行目 51 [sg.Button('読み取り実行'),], 52 # 5行目 53 [sg.MLine(font=('IPAゴシック', 14), size=(100,30), key='-OUTPUT-'),] 54] 55 56# ウィンドウを取得 57window = sg.Window('簡単OCR', layout) 58 59files = [] 60 61a = 0 62 63while True: 64 event, values = window.read() 65 if event == None: 66 break 67 68 if event == '読み取り実行': 69 files.extend(values['-FILES-'].split(';')) 70 language = 'jpn' if values['-jpn-'] else 'eng' 71 text = '' 72 for i in range(len(files)): 73 if not i == 0: 74 text += '================================================================================================\n' 75 text += scan_file_to_str(files[i], language) 76 if language == 'jpn': 77 text = text.replace(' ', '') 78 text += '\n\n' 79 window.FindElement('-OUTPUT-').Update(text) 80 sg.Popup('完了しました') 81 82window.close()

⑦実行

python3 jatoen_display.py

◇問題発生3:not found 'tkinter' (OSと依存関係あるらしくubuntuの場合以下を実行
◇対策3-1:Ubuntu18.10でNo module named ‘tkinter’になる問題を解決

sudo apt-get install python3-tk

イメージ説明

python3 jatoen_display.py

python

1username1@DESKTOP-V56OCM5:/mnt/c/work/jatoen_display$ python3 jatoen_display.py 2Traceback (most recent call last): 3 File "/mnt/c/work/jatoen_display/jatoen_display.py", line 6, in <module> 4 import PySimpleGUI as sg 5 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/PySimpleGUI/__init__.py", line 2, in <module> 6 from .PySimpleGUI import * 7 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/PySimpleGUI/PySimpleGUI.py", line 96, in <module> 8 import tkinter as tk 9 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/tkinter/__init__.py", line 37, in <module> 10 import _tkinter # If this fails your Python may not be configured for Tk 11ModuleNotFoundError: No module named '_tkinter'

◇No module named '_tkinter'
◇対策3-2:PythonでTkinterがimportできなかった

sudo apt-get install tk-dev
pyenv install 3.9.6

イメージ説明

python

1username1@DESKTOP-V56OCM5:/mnt/c/work/jatoen_display$ python3 jatoen_display.py 2Traceback (most recent call last): 3 File "/mnt/c/work/jatoen_display/jatoen_display.py", line 6, in <module> 4 import PySimpleGUI as sg 5 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/PySimpleGUI/__init__.py", line 2, in <module> 6 from .PySimpleGUI import * 7 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/PySimpleGUI/PySimpleGUI.py", line 96, in <module> 8 import tkinter as tk 9 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/tkinter/__init__.py", line 37, in <module> 10 import _tkinter # If this fails your Python may not be configured for Tk 11ModuleNotFoundError: No module named '_tkinter'

このあとは失念してしまい時系列で説明できません。
他にチャレンジした方法やエラーは以下です。

◇python3 jatoen_display.py → no display name and no $DISPLAY environment variable

sudo apt install x11-apps
vi ~/.profile

追加

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

◇VcXsrvの導入(WSLでGUIを利用する際のツール)
https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html
https://sourceforge.net/projects/vcxsrv/にアクセスしVcXsrvをインストール
C:\Program Files\VcXsrvのxlaunch.exeを実行

◇Command 'pyenv' not found
https://qiita.com/emi-cd/items/d7207409f20a7a6029d6
brew install pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

そもそもWSLでデスクトップアプリとして画面を開くことは難しいのでしょうか。もしWSLで気軽にbrewを使い、windows環境を作成できるのであれば非常に便利だと感じました。私の懸念点は、WSLによるpythonの環境、もしくはその場で作る仮想のpython環境が、windowsにてpython実行時にその環境が受け継がれたまま実行できるのかです。

問題点

問題点をまとめますと、2点あると思っています。
一、WSLによるbrewで環境を整えても、windowsにてpython実行時に同じ環境として実行できるのか。
二、WSL実行によってwindows画面上にデスクトップアプリの画面が開けるものなのか。

いろいろと調べているのですがかなり時間を要してしまっております。どなたかアドバイス頂けないでしょうか。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2021/07/17 15:28 編集

> そもそもWSLでデスクトップアプリとして画面を開くことは難しいのでしょうか。 そもそも現時点では公式に非対応で、WSLgと呼ばれているGUI動作のための仕組みが現在Insider Preview版で利用できるものの、正式対応は次の大型アップデートでしょう。(Win11だけなのか、Win10の最終アップデートにも含まれるのかは不明だけど) 質問文中にあるVcXsrvを利用する方法などもあるけど、それは一種のハックであって、すべてのGUIアプリケーションに対応できる保障をしてくれるものじゃありません。 ご自身でエラーの原因を特定し、細かい設定を見直すことができない人が手を出すような類のものではないでしょう。
dendenmushi

2021/07/17 23:52

>そもそも現時点では公式に非対応で、WSLgと呼ばれているGUI動作のための仕組みが現在Insider Preview版で利用できるものの、正式対応は次の大型アップデートでしょう。 まだ調査が不足しておりました。ご指摘頂きありがとうございました。
guest

回答1

0

ベストアンサー

手順のすべてを詳しく見たわけではないけれど、以下のように思います。

  • brew や apt を混ぜて使うべきではないのではないか。
    brewはそもそもMacOS用のパッケージ管理ツールで、aptはUbuntu(Debian)のパッケージ管理ツール。 そのコマンドの結果がシステムに同影響するのかわかってい限り、混ぜて使っていい結果が出るとは思えません。

Ubuntuの標準であるaptを使っう方法を探して実施するのがお勧めです。

  • いろいろなことを一度にやろうとしている
    質問にもあるとおり、wslからGUIのアプリを使うのは手間がかかります。pythonの導入についてもあまり慣れているようには見えません。

UNIXのシステムではGUIの部分は単なるアプリケーションの役割ですので、表示させることそのものは裏技でもなんでもありません。ですが、wslを有効にしただけではGUIは使えるようになりませんので、書いてあるとおり、VcXsrvなどのXサーバを入れたりwsl側に設定が必要だったりします。

投稿2021/07/18 07:53

TakaiY

総合スコア12741

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dendenmushi

2021/07/18 09:05

はい。今回は諦めて本来のインストール方法を模索する方法で行おうと思います。アドバイス頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問