Pythonのお勉強 Part71

■ このスレッドは過去ログ倉庫に格納されています
2023/09/20(水) 09:13:41.41ID:u6xixiUt0
↑スレ立てる毎に減るので、減ってたら3つに補充すること。

・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
 エラー文(勝手に省略orスクショうp等の横着禁止)と
 おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。

★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
  ↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇Pythonドキュメント https://docs.python.org/ja/3/
◇まとめwiki ttp://python.rdy.jp/
※前スレ
Pythonのお勉強 Part70
https://mevius.5ch.net/test/read.cgi/tech/1677856680/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2023/10/13(金) 16:27:41.27ID:o2+w7ksq0
>>343
>間違った可変長引数の使い方
エラーでるの?
バグりやすいの?
>>336 >ドキュメントやらどこかに明記されてたってこと?

てか同じこと言ってない?w
で、言う割にはなぜか論理的に説明はできないっていうの繰り返してるような
2023/10/13(金) 16:50:17.50ID:CVigb7Ut0
根拠がダサいだしな
ダサいかどうかを基準とする考え方はダサい
2023/10/13(金) 17:31:26.11ID:TNjzrdTI0
すべて羅列するなら(名前付き引数や**kwargsは除外)
単数
①def add_user(user: User) #一般的
②def add_user(user: List[User]) #関数名からListである必要性を連想できない
③def add_user(*user: User) #あるっちゃある例print
④def add_user(*user: List[User]) #②同様
複数
①def add_users(user: Users) #UsersのUser取り出しロジックがUsersのデータ型に依存、関数名での補足がいると思う
②def add_users(user: List[User]) #よくみる、①の発展、だがList展開ロジックが必須で暗黙的
③def add_users(*user: User) #=単数③、より明示的
④def add_users(*user: List[User]) #=単数④

単数④複数④は無い、関数名次第ではアリ

あくまでadd_user,add_users名でやるなら
単数①、単数③、複数③、複数②だな
本質は複数①②が同列に扱われている、という部分だと思う
2023/10/13(金) 18:25:27.74ID:/53+FR130
最近Python始めたんだがGitHubで公開されてるStableDiffusionのsafetensorsファイルをOnnxファイルに変換するスクリプトをクローンして使って見たんだ
その中でハギングフェイスのライブラリ使ってんだがそのライブラリに変更があったみたいでスクリプトがまともに動かなくなってた
Pythonってこういうことよくあるの?
348デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 18:29:10.51ID:sP+zp0cDa
>>344
ごめん、そもそもadd_users(*users)と書く設計にしても全然動くわけで
どう書くと「書く側の人間が」「バグらせやすい」という話を一貫してしてると思ってたのでまさかそこが理解できないとは思わなかった
「バグりやすい」より「バグらせやすい」と書いたほうが親切だったね、どちらでも意味が通るけど
349デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 18:36:26.11ID:sP+zp0cDa
>>330
来る配列の深さもshapeもわからないなら再帰で書くしかないからそれはスターアンパックで書いて構わないと思うよ

2重配列とか3重配列とか、numpyで言えばndimとかshapeの一部が決まってる多重配列を扱う場合にスターアンパック使うのはよくないと思う
こういうのは俺が勝手に言ってるだけでもなくて例えばEffective Pythonには4つ以上の要素を含む(1次元)配列をスターアンパックするなと書いてある
2重、3重、4重とかの組み込み型の多重配列は普通にコード書いて出てくるがそれらをほいほいスターアンパックすればよりバグを生みやすいと思う
add_users(*users)は俺にはアンチパターンに見える
2023/10/13(金) 19:36:16.66ID:v7U/yjft0
>add_users(*users)は俺には
嫌ならそう書かなければいいだけでは・・?
多重配列の生成とその扱いを混同してるんだと思うが
usersがUserクラスを持つならそれに従えばいいと思うぞ
例えば4つ以上といわず[np,np,np,,,,,]扱う、みたいなケースがあるのかはしらんが
無理にスターアンパックする必要ないわけで
>>308>書くのが明らかに簡潔なケースでは当然使うけど
と同じように逆然りでしょ
2023/10/13(金) 19:38:42.67ID:gtyKnuUL0
print関数という実績
2023/10/13(金) 19:57:29.33ID:rRALxWOX0
add_users(user1,user2)と書いてもadd_users(*users)と書いても動いちゃう
だから(書く側の人間が)バグらせやすいんだ
そんなことある・・?
False==0で動いちゃった、よりよっぽどましだと思うが。。
だって少なくともエディタの補助範囲内だし
2023/10/13(金) 20:09:45.61ID:hDXnu7+A0
自分の取り扱ってるデータが何なのか理解せずに関数に渡すことがまずありえないしな
2023/10/13(金) 20:24:35.57ID:ZA5Rx9q50
・1つしか渡す機会がない
・リストしか渡す機会がない
・管理別々の2つ以上の変数を渡したい時がある
・処理速度が気になる場所
などなど

臨機応変に使い分けちゃえば?
2023/10/13(金) 20:46:44.55ID:K56rmpTB0
あんまり興味ないけど一言
print関数はプログラマにとっての使いやすさに特化してるから可変長引数でいいけど
普通の関数には使わないほうがいい
iterableを受け取る設計がいいことが多い
356デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 20:47:33.98ID:e5Ke0Kb/a
>>350
>>352
まあ、問題提起になったコード見るとまずadd_user(*users)と書いてるし色んな意味で論外と思う
表現と処理が一致してないし、可変長引数するのに単体のuser渡すのと同じ関数になってる必要がないしね
アンチパターンではかなり優しい表現になってしまう
357デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 20:50:53.31ID:e5Ke0Kb/a
端的に言うと、プログラミングが苦手な人が書くコード
358デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 20:58:43.17ID:e5Ke0Kb/a
そもそも自分一人しか見なくて完全にロジックを把握できてるコードなら縛り無く好きに書けばいいんだよ
ここでどう書くのがキレイか?とか聞く時点でバグらせづらさとか、プロジェクトとして複数人で共有した場合の能率の話とかしてると考えるのが当たり前だよね
なのにアンチパターンとかバグりやすいとか言われると怒る心理がよくわからんよ
add_user(*users)は書いたら恥ずかしいコードだよ
2023/10/13(金) 21:03:29.43ID:LOKUwuMW0
臨機応変な有志たちは、>>346単数①に収束してる >>354
・リストしか渡す機会がない
は個人的には例えば、土や木や葉っぱデータの詰まった森データを渡すことを想定していて
森をリスト型で渡すことは稀
土とかを原子レベルで分解すればリストでいいと思う
同じように、1枚の落ち葉の詰まった落ち葉群をリストで渡す、というのは稀な印象
普通は落ち葉群クラスの落ち葉群インスタンスで渡すと思う
ただ、何の木の種類の落ち葉なのか、重さや枯れ具合など
落ち葉オブジェクトにするまでもない場合
リストに入れて渡す、という選択をする場合はあるが
有志たちはそれはあまりやっていない印象
自分が知らないだけかもしれない
2023/10/13(金) 21:07:38.31ID:x5KSOPoq0
問題提起になったコード見ると書き方のバリエーションだけで
使えや書けとは書いてないわけだが読解力の問題だったか
361デフォルトの名無しさん (ワッチョイ ee90-6t2b)
垢版 |
2023/10/13(金) 21:08:39.43ID:Sy9RKGN20
>>355で結論が出ているよね。
2023/10/13(金) 21:17:00.73ID:tgPT4vYj0
可変長かリストがどちらが便利かこっちを使えなんて話はしてない >>355
363デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 21:21:31.49ID:e5Ke0Kb/a
組み込みのlistの時点でappendとextendが別れてるというのが全てだと思う
データを管理したいならappend(a)とappend(*a)が同時に使えるように書くべきじゃない
型チェックすれば済むとか、処理を把握してるから分かる、とか以前の問題で
どうしたらそういうコードを擁護しうるのかな……と思う 
まあ苦手なものは仕方ないけどね
2023/10/13(金) 21:26:32.61ID:CVigb7Ut0
単体で渡してもリストで渡しても処理してくれる
というのは便利なので、よく作るけどな
自分で作ったのに仕様を覚えられない、という原因が大きいかもしれない
365デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 21:30:41.15ID:e5Ke0Kb/a
そもそもPythonの関数定義が戻り値1つなら裸で2つなら長さ2のタプルとかいう設計だからね
可変長やアンパックがありがたい場面も当然ある
ただデータを管理するのにそんな書き方する必要は全くないって話
間違いなく不要
2023/10/13(金) 21:39:09.86ID:fJskMopF0
同時に使えるように書くべきじゃないっていうが
append(*{})も普通に動くわけで
*を間違えてつけちゃった と 可変長として間違えました 結果、動いちゃいました
なんて前後でエラー処理する以外にチェックしようがないわけで
間違えた自体と関数分けるのとは話関係ないわな
appendとextendはまさに、可変長使わないなら関数名とアノテーション発生でってことでしょ
367デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 21:45:01.00ID:e5Ke0Kb/a
>>366
少なくともPythonのlistでは引数1個以外のappendは動かないけど、Pythonじゃない言語を触ってるのかな
まあこの一例でも分かるように、1次元配列ですらバグらせる人はバグらせるんだから
インターフェイスはどんな人でも確実に使えるようにしといたほうがいいよ
2023/10/13(金) 21:47:35.20ID:oLBZLdpr0
room.add_user(user) ←roomにuserをadd
room.add_users([]) ←roomにuser群リストをadd
list.append("a") ←リストに値をappend
list.extend([]) ←リストをリストによりextend

こうみるとわかりやすいな
関数名の情報量が全然違う
2023/10/13(金) 21:52:27.24ID:UzC3xoYA0
観点のちがいなだけでどれも同意できるけど
ひとりだけ変なのがおる
2023/10/13(金) 21:56:26.67ID:CVigb7Ut0
奇遇だな
俺も圏外から攻撃したいだけの変なのを検出してる
2023/10/13(金) 21:56:28.96ID:yy2kD+Fp0
引数1個以外のappendは動かないから何なんだ??>>367
だね、としか言いようがないが。
むしろだからこそ一行の*辞書も*リストも動いちゃうわけで
append,extendが同時に使えるように書くべきじゃない起因ではないし
かといってスター根絶ってわけでもないでしょ、ってことでしょ
372デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:02:03.89ID:e5Ke0Kb/a
>>371
ごめん、「動いちゃうわけで」の部分が全く理解できないけどどういう意味?
[].append(*a)はaが長さ1の配列で無い限り動かないけど
長さ2でも3でも全部エラーだけど長さ1の配列に限って動くからそれだけはアンパックで書ければ便利って意味?
正気とは思えないな~
373デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:14:15.69ID:e5Ke0Kb/a
仮に飛行機じゃないとした場合、一番よく使う組み込み型であるlistのappend/extendの仕様すらろくに理解してないで噛み付く人が複数いるスレってことになるが
まさかこのスレのレベルがそんな低いとは思わないから中点2つの・・使ってるアンパック大好きな人がなんか毎レス書き込む回線ブラウザ変えてることと結びつけそうになってしまうけどね
ツッコミどころあるコード乗せてツッコまれたら素直に受け入れたほうがいいよ
2023/10/13(金) 22:15:04.38ID:3PC3pmfU0
>>372
>append(a)とappend(*a)が同時に使えるように書くべきじゃない
上での>append(*a)
は>同時に使える、とのことから可変長引数へ渡すため
>*リストも動いちゃう
は、例えばappend(*["a"])とかで可変長引数のためではないでしょ
つまり可変長引数であろうがなかろうが>動いちゃうんだから
>同時に使えるように書くべきじゃない
が理由で >appendとextendが別れてるというのが全てだと思う
と断定するのは的外れ
375デフォルトの名無しさん (ワッチョイ d533-Tqdi)
垢版 |
2023/10/13(金) 22:17:47.09ID:v2U3cWHO0
>長さ1の配列で無い限り動かないけど
動いててワロタ
376デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:24:28.94ID:e5Ke0Kb/a
[].append(*[])
[].append(*[2,3,4])
これ動くかなぁ🤔
こんな明瞭な誤りに擁護がいっぱい付くって…😰
まあ間違い絶対認められないマンが暴れてるだけだろうけど
認められないならまずここで質問しなければいいのに
2023/10/13(金) 22:28:03.09ID:4579Uo5r0
>これ動くかなぁ
アスペ?
それが許されるならappend(*a)でエラーでたぞ
append無いって言われたから
あーおそらくリストのappendでaも適当に与えておいて、でやっと動いたが
378デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:30:25.92ID:e5Ke0Kb/a
>>374
そのレスがまさに「長さ2でも3でも全部エラーだけど長さ1の配列に限って動くからそれだけはアンパックで書ける」って意味じゃん
やっぱり正気とは思えないかな
それは位置引数1個の関数に引数1個渡してんだから動くよ
呼ぶ時にスターアンパック使ってるのが間違いなだけで
長さ2以上で動かないのにスターアンパックしてなんの意味が?
難しい文法は向いてないっぽいから無理しないほうがいいよ😅
2023/10/13(金) 22:35:20.34ID:xOQDGR0o0
>>378
もしかしてまったく理解してないのきみのほうでは
仮に可変長引数のappendがあったとして、append(*a)で書きたくなければ無理して書かなくていいんだぞ?
故に*付けた付けなかったってのは
>appendとextendが別れてるというのが全てだと思う
まったく繋がってない 的外れ
380デフォルトの名無しさん (ワッチョイ 850e-iLfk)
垢版 |
2023/10/13(金) 22:40:02.91ID:79uhgkd/0
リスト結合する時は+使うわ
381デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:57:18.57ID:e5Ke0Kb/a
>>379
仮にとかじゃなくてlistのappendの話だからね
list.appendは可変長引数取らないから
日本語読めない&list.appendの仕様も知らないのに食い下がる度量は認めるよ
でもPythonは向いてないかも
2023/10/13(金) 23:19:09.90ID:Ds5LqbN70
>>381
いや、老若男女だれがどうみても君自身が
>>363 >データを管理したいならappend(a)とappend(*a)が同時に使えるように書くべきじゃない
と、可変長引数を持った仮appendの話をし
>appendとextendが別れてるというのが全てだと思う
だから組み込みlistの(本家)appendがそんな仕様にはなっていないのだ
という論理展開をしている
可変長引数を持っていようがいまいが、*aは通るときは通る
という可能性をきみが失念して論理展開していたのは明らかです
383デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 23:19:54.70ID:AHWiHfG4a
[].append(*{})は普通に動く、というレベルの認識の人が無闇に可変長引数使わないほうがいいのは間違いないかな
Guidoに習ってappendとextendで分けて引数は常に1個にしよう
384デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 23:25:55.75ID:AHWiHfG4a
>>382
そもそも

add_user(user) ⇔ list.append
add_user(*users)⇔ list.extend

これらの比較の話として、同じメソッドに2通りに呼び出しを与えるべきでない、という文脈の話をしているので(しかもuserは自作クラス、usersは自作クラスのリストという制約がついているので混同しようがない)
そこで妙に食い下がっているのは単に君が議論を追えてないだけだよ
list.appendが可変長引数を取ると思っている君がねw
385デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 23:26:55.88ID:AHWiHfG4a
自作クラスのオブジェクト ね
2023/10/13(金) 23:36:32.04ID:sRXpRcqA0
>>383それがありなら>>377 単に君が動かない場合を想定してるだけで、動く辞書を想像できなかっただけ
単に省略で*{}と書いただけでまさに>>377
>>384
故に>>377前提である
>list.appendが可変長引数を取ると思っている
は成立しない
>、という文脈の話をしている
こちらもその文脈の話をしているし、していないとは一言も書いてない
文脈あろうがなかろうが
仮定した>append(a)とappend(*a)
によって君が
>同時に使えるように書 いちゃうと不都合だから
>appendとextendが別れてるというのが全て
という論理展開している事実は変わらない
2023/10/13(金) 23:57:10.89ID:JzNLMdAt0
>appendとextendが別れてるというの は
>append(a)とappend(*a) のように >同時に使えるように書 けちゃうと不都合があるから >>363

可変長関係なく動く*aを失念してるわな どうみても
2023/10/14(土) 07:09:49.12ID:8MwVC+VG0
>>380
計算科学の世界とかなら話は別だけど、可読性を考えるとオペレーションでリストの処理を記述するのは微妙かも
389デフォルトの名無しさん (スフッ Sd33-Kt/B)
垢版 |
2023/10/14(土) 14:06:37.16ID:tZ7gaNQAd
>>372-373
こいつな (クスマテ MM7e-RHqV)
>268
390デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/14(土) 16:44:20.26ID:x03gZ5vca
>>342
%%time は jupyter notebook 用だろ
python の文や式ではない
2023/10/15(日) 00:49:27.64ID:1GgH9uvV0
vim の外部Linux コマンド呼び出しみたいなものだろう
2023/10/16(月) 06:31:16.76ID:SmfSm8IF0
anacondaで入れてみたけど
普通に入れたほうが楽?
だとよけいに
2023/10/16(月) 06:31:27.47ID:SmfSm8IF0
vscodeだとよけいに
2023/10/16(月) 07:33:26.99ID:dwn5MUgM0
普通とは?
395デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/16(月) 10:10:32.26ID:kgcCjrnKa
>>392-393
君のレベルなら Anaconda の方が無難
VSCodeはあきらめて
2023/10/17(火) 00:02:40.60ID:IDqb6kdg0
Google ColabでTwitterの自動投稿に成功したのですが、
いざEXE化しようと思い、VSCodeに移植しても動きません
というか、iniファイルの読み込みができないようなのですが、
何か方法ありますでしょうか?

一応、ini読み込み用の物なのですが、こちらもうまくいきませんでした。
また、スクリプトも実行すると raise KeyError(key) KeyError: 'BASE'と出して止まってしまいます。

よろしくお願いします。

# 設定ファイルを扱うモジュールをインポート
import configparser

# ConfigParserのインスタンス(特定の機能を持った変数)を取得
config = configparser.ConfigParser()

# 用意したconfig.iniを読み出し
config.read(".\config.ini")

# 変数Config_1の中から、"BASE"セクションの"speed"と"weight"項目の内容を取り出し
read_1 = config["BASE"]["speed"]
read_2 = config["BASE"]["weight"]

# 変数の内容を出力
print("read_1 =", cfg_read_1)
print("read_2 =", cfg_read_2)
2023/10/17(火) 00:20:02.64ID:KXoPz/N40
まずはconfig.readの戻り値を確認
2023/10/17(火) 03:17:56.82ID:gqGJp+iF0
>>394
anacondaつかわずに
Pythonをインストールする
399デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/17(火) 05:51:43.89ID:hOrq7F7ga
config.read("./config.ini")
400デフォルトの名無しさん (ワッチョイ d9d3-VGqS)
垢版 |
2023/10/17(火) 09:39:25.08ID:IfpwnPMt0
config.iniの書き方なのでは
2023/10/17(火) 13:58:02.86ID:W1mvng0kd
>>397,400
ありがとうございます。
返り値はNoneでした。
また、"./config.ini"やフォルダをつくって
"./config/config.ini"やフルパスも試しましたができませんでした。

何か環境構築が間違っている可能性があったりするのでしょうか?

GoogleColabではエラーなく実行できるのに・・・
(;´д`)
402デフォルトの名無しさん (JP 0H25-Fhx2)
垢版 |
2023/10/17(火) 14:15:23.43ID:lA46vkBGH
GoogleColabではいくつかのモジュールが最初からインストールされている。
Vscodeでは必要なモジュールをpipでインストールする必要があるのでは?
403デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/17(火) 14:26:21.59ID:vCPpyEw2a
もしそうなら
import configparser
でエラー出てるはずだけどそこは出てないんだろ
404デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/17(火) 14:32:36.89ID:vCPpyEw2a
vscode 内の python から観て './' が実際はどこなのかを確認した方が良いな
print(os.path.abspath('./'))
print(os.path.abspath('.'))
2023/10/17(火) 15:06:00.27ID:HxEc0Y/V0
>>396
そのコードのままだと
config.read(".\config.ini") はcolabでは読み込めなかったな
もしそのまま移植したって場合に
元はconfig.read("./config.ini")だったけど移植作業中に
".\config.ini"とか"絶対パス.\config.ini"になっちゃったとか?
2023/10/17(火) 15:06:09.46ID:T5fw5RAV0
>>396
そのコードのままだと
config.read(".\config.ini") はcolabでは読み込めなかったな
もしそのまま移植したって場合に
元はconfig.read("./config.ini")だったけど移植作業中に
".\config.ini"とか"絶対パス.\config.ini"になっちゃったとか?
407デフォルトの名無しさん (ワッチョイ d9d3-VGqS)
垢版 |
2023/10/17(火) 15:22:55.43ID:IfpwnPMt0
カレントから読み出すコードは、実行方法や環境によってどこがカレントか変わるんだよな
設定は絶対パスで書くのが無難
408デフォルトの名無しさん (JP 0H25-Fhx2)
垢版 |
2023/10/17(火) 15:25:40.98ID:lA46vkBGH
>>404
正確には

from pathlib import os

print(os.path.abspath('./'))
print(os.path.abspath('.'))
2023/10/17(火) 17:27:49.44ID:idEJG0se0
>>401
>返り値はNoneでした。
config.readはempty listは返すけどNoneは返さないんだわ
インタプリタかデバッガを使って変数の値を確認したり
コードをステップ実行する方法を先に覚えたほうがいいかもしれない
2023/10/17(火) 21:21:59.26ID:u48pYz2N0
>>408の書き方でもいいけど、
os.getcwd()という専用関数があるけどね
VSCodeはタスクランナーの設定でワーキングディレクトリ自由に設定できるからちゃんと設定しないとダメだよ
2023/10/17(火) 22:16:02.73ID:IDqb6kdg0
>>409
返り値が良くわかっておらず、
サンプルコードみてこれかなぁ・・・
という物でしたので、申し訳ありません。
プログラムはあまり手を出したことがなくあまりわかっていない状況です。

また、本来の目的はTwitterの自動投稿BOTの作成でしたので、
コンフィグ読み込みではなくベタ書きして
ビルドしたところ、無事に投稿できたので、
コンフィグ読み込み部分問題かと思っております。

import configparser
config = configparser.ConfigParser()
config.read("./config.ini")

なにか問題があれば、教えて頂けないでしょうか。
412デフォルトの名無しさん (ワッチョイ a910-Fhx2)
垢版 |
2023/10/17(火) 22:54:58.15ID:lA46vkBG0
ファイルの存在チェックを入れないと、ファイル読み込みでファイルが存在しなくてもその部分で特にエラーにならないようだ。
まずはファイルの存在チェックを入れてみては?

参考:このページの最初のプログラムは動いた。違いはencodingかな?
https://qiita.com/mimitaro/items/3506a444f325c6f980b2
413デフォルトの名無しさん (ワッチョイ a910-Fhx2)
垢版 |
2023/10/17(火) 22:58:34.67ID:lA46vkBG0
あ、他に、ファイル名だけで指定するとデフォルトのフォルダが適用される。
./とかいらんだろ。
414デフォルトの名無しさん (ワッチョイ a910-Fhx2)
垢版 |
2023/10/17(火) 23:10:27.55ID:lA46vkBG0
ちなみにPyinstallerでEXE化するのはGoogleColabでもできるらしいぞ。
415デフォルトの名無しさん (ワッチョイ fb90-/4nw)
垢版 |
2023/10/18(水) 08:47:33.24ID:PQ7Pmh1D0
>>411
絶対パスで指定してみたらどうでしょう。
2023/10/18(水) 08:56:15.85ID:wdlP5gm8r
>>411
>>408は試してないの?
2023/10/19(木) 00:28:52.94ID:QaFrapAv0
>>397-416
ありがとうございます。
>>412さんの方法で無事にコンフィグ読み込みが出来ました。
また、Exe化も無事に成功しwindowsで起動も確認しました。
お付き合いいただき、ありがとうございました。
2023/10/19(木) 09:37:09.09ID:Gku/AMr90
普通はファイルが無ければエラーにするべきだけど、
configは無ければデフォルトという動作も要求されるから微妙
419デフォルトの名無しさん (ワッチョイ fb05-/4nw)
垢版 |
2023/10/19(木) 15:18:15.24ID:oX+KclHi0
PysinpleGUIの.FileBrowseで開くフォルダはどうにかして変えられんとですか?
2023/10/19(木) 16:22:02.82ID:tj/mFVfZ0
FileBrowse(initial_folder='...')
421デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/21(土) 21:28:06.19ID:h0yPi2SA0
Python最近始めたのですがpy 〇〇.pyではちゃんと動いたスクリプトをpyinstallerでexe化したのですがexe化したものを実行してみるとErrorが出ます
スクリプトのときは仮想環境(Python3.3以降標準のvenv)で動かしていたのでその仮想環境内でpyinstallerでexe化しました
pyinstallerは仮想環境の中で実行すれば仮想環境のパッケージをすべてまとめてくれるのではないのですか?
それともそもそもpyinstaller自体がゴミカスでまともに.pyをexe化できないのですか?
以下のレスにプロンプトからの情報を貼ります
どこがエラー文なのかわかりません
422デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/21(土) 21:28:47.37ID:h0yPi2SA0
2023-10-21 18:57:04.0020775 [W:onnxruntime:Default, onnxruntime_pybind_state.cc:1987 onnxruntime::python::CreateInferencePybindStateModule] Init provider bridge failed.
Traceback (most recent call last):
File "importlib\metadata\__init__.py", line 563, in from_name
StopIteration

During handling of the above exception, another exception occurred:

↓続きます
423デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/21(土) 21:29:11.60ID:h0yPi2SA0
Traceback (most recent call last):
File "transformers\utils\versions.py", line 102, in require_version
File "importlib\metadata\__init__.py", line 1008, in version
File "importlib\metadata\__init__.py", line 981, in distribution
File "importlib\metadata\__init__.py", line 565, in from_name
importlib.metadata.PackageNotFoundError: No package metadata was found for tqdm

During handling of the above exception, another exception occurred:

↓続きます
424デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/21(土) 21:29:38.85ID:h0yPi2SA0
Traceback (most recent call last):
File "diffusers\utils\import_utils.py", line 684, in _get_module
File "importlib\__init__.py", line 126, in import_module
File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module
File "diffusers\pipelines\stable_diffusion\pipeline_stable_diffusion.py", line 20, in <module>
File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module
File "transformers\__init__.py", line 26, in <module>
File "PyInstaller\loader\pyimod02_importers.py", line 391, in exec_module
File "transformers\dependency_versions_check.py", line 57, in <module>
File "transformers\utils\versions.py", line 117, in require_version_core
File "transformers\utils\versions.py", line 104, in require_version
importlib.metadata.PackageNotFoundError: No package metadata was found for The 'tqdm>=4.27' distribution was not found and is required by this application.
Try: pip install transformers -U or pip install -e '.[dev]' if you're working with git main

↓続きます
425デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/21(土) 21:30:05.41ID:h0yPi2SA0
The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "onnxConverter.py", line 33, in <module>
File "<frozen importlib._bootstrap>", line 1229, in _handle_fromlist
File "diffusers\utils\import_utils.py", line 675, in __getattr__
File "diffusers\utils\import_utils.py", line 675, in __getattr__
File "diffusers\utils\import_utils.py", line 674, in __getattr__
File "diffusers\utils\import_utils.py", line 686, in _get_module
RuntimeError: Failed to import diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion because of the following error (look up to see its traceback):
No package metadata was found for The 'tqdm>=4.27' distribution was not found and is required by this application.
Try: pip install transformers -U or pip install -e '.[dev]' if you're working with git main
[5820] Failed to execute script 'onnxConverter' due to unhandled exception!

終わりです
426デフォルトの名無しさん (ワッチョイ 9946-5z4m)
垢版 |
2023/10/21(土) 22:23:26.42ID:9n8k9yEZ0
>>421
> どこがエラー文なのかわかりません

RuntimeError: からじゃないの。
2023/10/21(土) 22:59:56.07ID:DDgBRs4V0
大抵は一番上以外はどうでもいいんだよな
428デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/21(土) 23:08:32.50ID:h0yPi2SA0
>>426
ありがとうございます
429デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/21(土) 23:09:24.37ID:h0yPi2SA0
tqdmのメタデータがないって感じなのでしょうか
2023/10/22(日) 01:28:21.12ID:EUQDeLnPM
自分を棚に上げてツールに文句言うゴミカス
431デフォルトの名無しさん (ワントンキン MM8a-oq3V)
垢版 |
2023/10/22(日) 04:53:10.13ID:HZnv6FtHM
マルチポストの馬鹿
2023/10/22(日) 06:41:22.07ID:nQ65Zno5M
何でexe化なんてことをするのか理解できない
Python入れて手実行じゃダメなんか
標準以外の実行方法を取るのはPythonの否定と冒涜だ
433デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/22(日) 06:56:39.07ID:Agpi7r520
>>432
他人にPython入れるのを強要するほうが他人に対する冒涜だと思うのですが
434デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/22(日) 07:00:36.37ID:Agpi7r520
>>430
一番聞きたいのは仮想環境内でpyinstaller使うと仮想環境内のパッケージすべて入りますよね?ってところなんですが…
まさかできないんですか?
本環境のパッケージが入ってくるとか?
今PCにごちゃごちゃ入れたくないので(Version管理も大変なので)本環境にはpipくらいしか入れてません
2023/10/22(日) 10:18:34.02ID:hsNq0PHTd
>>434
pyinstaller 仮想環境でググることもしてないの?
436デフォルトの名無しさん (ワッチョイ ce90-xUKY)
垢版 |
2023/10/22(日) 11:03:48.10ID:1hwURjPp0
思い通りにいかないとゴミカス扱いする輩には反応する必要なし
2023/10/22(日) 11:13:24.56ID:/wNoCoYT0
被害妄想のかたまりだな
438デフォルトの名無しさん (ワッチョイ dd2a-6qmC)
垢版 |
2023/10/22(日) 11:51:05.33ID:Agpi7r520
>>435
そういうこと言うんですね
わかりましたもうききません
2023/10/22(日) 12:06:29.73ID:hsNq0PHTd
>>438
ちゃんと情報収集してるのか聞いただけじゃん
なにヘソ曲げてんの?
2023/10/22(日) 13:24:24.73ID:QLmKzOHx0
もう聞かないって本人が言ってるんだしほっとけばいいじゃん
彼にはpyinstallerがコケること含めてあらゆる全てが自分への攻撃に感じるんだろう
441デフォルトの名無しさん (ワッチョイ 55dd-ANn9)
垢版 |
2023/10/22(日) 22:15:21.64ID:N5qxvd050
PyPIにアップロードするんじゃなくても、pip installでインストールできるパッケージを作成する方法は学んで損はないと思う
2023/10/22(日) 22:30:37.98ID:oSgNjv9Y0
def find_data_file(filename):
if getattr(sys, "frozen", False): # exe
datadir = os.path.dirname(sys.executable)
else:
datadir = os.path.dirname(__file__) # script
full_path = os.path.join(datadir, filename)
return os.path.normpath(full_path)
2023/10/22(日) 22:50:39.51ID:oSgNjv9Y0
Pyinstallerでの問題回避のいくつか
--hidden-import オプションでPyInstallerが自動的に検出できないインポートを手動指定
--additional-hooksオプションでhook ファイルでの依存関係指定
specファイルでバイナリをビルドに含めるようにする
あと>>442
それからライブラリのバージョン
アップデートで解決するかもしれないし
ダウングレードで解決できるかもしれない

あとはPyinstallerをあきらめてNuitkaを使うか
Python embeddable
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況