回答編集履歴

4

動的リンクの場合について言及

2020/08/19 04:42

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -58,7 +58,11 @@
58
58
 
59
59
  上記のコードで、**LZW圧縮TIFFファイルの場合** 問題の再現を確認しました。
60
60
 
61
- ※ 他の形式では、対応するcodecsが無いと同様のエラーが起こる可能性はあります。対象のファイル次第。
61
+ ※ 他の形式では、対応するcodecsが無いと同様のエラーが起こる可能性はあります。対象のファイル
62
+
63
+ 次第。
64
+
65
+ ※ もし動的リンクでdllファイル等 が必要な場合は、追加で binaries への設定が必要です。
62
66
 
63
67
 
64
68
 

3

問題の再現に用いたコードを追加

2020/08/19 04:42

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -39,6 +39,26 @@
39
39
  ----
40
40
 
41
41
  追記
42
+
43
+
44
+
45
+ ```python
46
+
47
+ # 問題の再現に用いた最小限のコード
48
+
49
+ import tifffile
50
+
51
+ img = tifffile.imread("IN.tiff")
52
+
53
+ tifffile.imsave("OUT.tiff", img)
54
+
55
+ ```
56
+
57
+
58
+
59
+ 上記のコードで、**LZW圧縮TIFFファイルの場合** 問題の再現を確認しました。
60
+
61
+ ※ 他の形式では、対応するcodecsが無いと同様のエラーが起こる可能性はあります。対象のファイル次第。
42
62
 
43
63
 
44
64
 

2

解決方法追記: imagecodecs._imcd を追加する

2020/08/19 02:47

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -33,3 +33,59 @@
33
33
  lzw_decode 関数は、Python の関数で ./imagecodecs/_imagecodecs.py ファイル内にありました。
34
34
 
35
35
  C拡張ではありません。
36
+
37
+
38
+
39
+ ----
40
+
41
+ 追記
42
+
43
+
44
+
45
+ ```python
46
+
47
+ # pythonファイルで明示的インポート
48
+
49
+
50
+
51
+ import imagecodecs._imcd
52
+
53
+ ```
54
+
55
+
56
+
57
+ もしくは
58
+
59
+
60
+
61
+ ```
62
+
63
+ # pyinstaller のオプション or spec ファイル編集
64
+
65
+
66
+
67
+ --hidden-import=imagecodecs._imcd
68
+
69
+ ```
70
+
71
+
72
+
73
+ でどうでしょう。
74
+
75
+
76
+
77
+ ----
78
+
79
+ [When Things Go Wrong -- pyinstaller のトラブルシューティング](https://pyinstaller.readthedocs.io/en/stable/when-things-go-wrong.html)
80
+
81
+
82
+
83
+ - `python -v` で動的に読み込まれるモジュールを調べる
84
+
85
+ - imagecodecs._shared は存在したが、imagecodecs._imcd は含まれていなかった
86
+
87
+ - dist/APP_NAME/imagecodecs/ に _imcd を追加してみる → 動作成功
88
+
89
+ - 解決策A: pyinstaller が動的インポートを探せるように、明示的 import
90
+
91
+ - 解決策B: pyinstaller のオプション/ specファイル編集で指定する

1

情報訂正

2020/08/18 18:39

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -21,3 +21,15 @@
21
21
  pyファイルならpyinstallerが勝手に対応してくれるはずなので、
22
22
 
23
23
  該当箇所はC拡張や外部ライブラリになってるのではないでしょうか。
24
+
25
+
26
+
27
+ ----
28
+
29
+ 訂正
30
+
31
+
32
+
33
+ lzw_decode 関数は、Python の関数で ./imagecodecs/_imagecodecs.py ファイル内にありました。
34
+
35
+ C拡張ではありません。