見出し画像

備忘録-Pythonと戯れた結果寝不足になった-

業務改善・効率化に挑みたく、Pythonに触れる。

pyinstallerで.exe化したけれど、実行してもGUIが開かない・よくわからない、って方に届けばいいかな、と思います。

プログラムをちゃんと打つのは高校生以来。
高校でもPython扱ってくれればよかったのに。

Pythonに挑む×4回目くらい

1週間ほど前からPython再々再再チャレンジ。
一番最初は環境構築でつまづき、その後何度もつまづきましたが、今回ようやくコード打てるようになりました。
本当はRでやりたかったんだけど、Rだと実行ファイル作れないみたいなので諦め(本当はRで完成したのに、完成した後に気づいた)

実現したいのは、csvファイルを取り込んで、指定の列だけ抽出・csvファイルとして新規保存。

Rのコード

できたコード。

data=read.csv("xxx.csv",header = T,fileEncoding = "UTF-8")
data
nrow(data)
install.packages('dplyr') 
library(dplyr)
A = select(.data = data,列指定)
A


(誰でもできるわ)

って声が聞こえそう。
そう、誰でもできるよ。

これで僕のパソコン上でファイルを指定すれば好きな列だけを保存することができるようになった。
でも僕だけできても意味ない。=.exeにしなくちゃ

ってことでPythonに

Pythonも意外といけた

さすがPython
Cとかに比べ、めちゃくちゃ簡単にコードをかけると言われていた気がする。

割とわかりやすい気がします。

PythonではGUI画面からcsvファイルを選択・新規保存ができるようにしました。
毎回ターミナルとかRを開くのは大変なので。

スクリーンショット 2021-05-31 16.20.51


めちゃくちゃ単純で、参照を押せばファイルを選択でき、選択したのちに勝手に指定した列だけを抽出してRenameして保存してくれる。

Pythonではtkinter,pandas、osを利用
tkinterはGUIを作るため、osはファイル選択のため、pandasはcsvを読み込んだり書き込んだりするため。

import tkinter as tk
from tkinter import filedialog  
import pandas as pd 
import os 

tki=tk.Tk()
tki.geometry("350x200")

def btn_click():
   type = [("all file","*")]  
   path = os.getcwd () 
   file_path = filedialog.askopenfilename(filetypes = type, initialdir = path) 
   df = pd.read_csv(file_path, engine="python",usecols=[])
   print(df)      
   print(file_path) 
   file_path_name = os.path.splitext(file_path)[0] 
   print(file_path_name)  
   new_file_path = file_path_name + "_a" +".csv"  
   print(new_file_path)  
   df.to_csv(new_file_path, index=False)  
   df = pd.read_csv(new_file_path, engine="python",usecols=[]) 
   print(df)   
btn=tk.Button(tki,text='参照',command=btn_click)

btn.place(x=140, y=100)
tki.mainloop()

ここまでで多分3日くらい。
寝る間を惜しんで作成しました。
おかげで毎日8時間くらいしか寝れていません。

上記のコードを利用すれば誰でも同じものを作れます。
作れますけど、環境構築などがくそめんどくさいです。

Pythonの実行ファイルを作る

R同様、僕だけができても意味がないのです。
なので、実行ファイルを作る必要があります。

.exeというファイルです。

これさえあればどのパソコンでも同じ作業を行うことができるようになるわけです。
研究を進めていく人たちの負担軽減につながるので、ここが一番大切なところ。

「ほおおおお、pyinstallerを使えば.exe作れるんか。余裕余裕」
(実際、.exeファイルを作るのはめちゃくちゃ簡単。)

で、完成した.exeを開く。

カチカチッ...
???
カチカチッ...
??????????

「ひらけなぁぁぁぁぁいぃぃぃぃぃ!!!」

「あぁ、これはpyinstallerのエラーやな。サンプルコード拾って実行するか...」
「できた...!!!!」

「...サンプルコードで.exeできたってことは、ワシのコードが悪いんか...」

ってとこで挫折。

寝る時間が半分くらいになりました。

問題は多分pandasの利用

今回の問題点はおそらくpandasでcsv読み込み・書き込みの時点でファイルを引っ張ってこれない点。
ここをどうにか解決しない限りは多分.exe化は難しそう。

んー誰かこの謎を解決できる方いないかな...
pandasを使わない方法もあるけど、よくわからん...

追記

windowsでコンパイルしたらできた
なんでかはよくわからない

もしかしたらwindowsに入ってるパッケージが古かったのかもしれない
M1Macが良くないのかもしれない

ここはこれからも検討していかないと、同じ現象にあいそう

とりあえずnumpyとかの依存っぽいのでそこの検証

追記の追記

IntelMacでも作成できなかったのでなんでだろう
そもそもpyinstallerだと.exeしか作れない?

https://ja.stackoverflow.com/questions/71522/pyinstallerで-noconsoleオプション指定時に作成される-appファイルが起動しない

これを見る限りは.appも作成はされるはず...

windowsとMacでパッケージのバージョンを調べてみた

Mac
numpy  1.20.2
pandas 1.2.4
pyinstaller 3.6
xlsxwriter 1.3.8
openpyxl 3.0.7
matplotlib 3.3.4
mkl 2021.2.0

windows
numpy 1.18.1
pandas 1.0.1
pyinstaller 4.3
xlswriter 1.2.7
openpyxl 3.0.3
matplotlib 1.14
mkl 2020.0

こんなもん?
pyinstaller以外はMacの方が最新バージョン入ってるなぁ
これのせいかなぁ

全部下げるのめんどくさいなぁ...

この記事が気に入ったらサポートをしてみませんか?