回答編集履歴
5
追記
test
CHANGED
@@ -14,11 +14,13 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
> `'__main__'` はトップレベルのコードが実行されるスコープの名前です。
|
17
|
+
> `'__main__'` はトップレベルのコードが実行されるスコープの名前です。モジュールが、標準入力から読み込まれたとき、スクリプトとして実行されたとき、あるいはインタラクティブプロンプトのとき、`__name__` には `'__main__'` が設定されます。
|
18
18
|
|
19
19
|
|
20
20
|
|
21
21
|
なので、実行したファイル(`python hogehoge.py`で実行した時のhogehoge.py)で定義されたクラスをpickle化した時、pickle化されたデータに入っているクラス名は(`hogehoge.encoding`ではなく)`__main__.encoding`になります。
|
22
|
+
|
23
|
+
(Jupyterのnotebookやconsoleもインタラクティブプロンプトと同様で、スコープ名は`__main__`です)
|
22
24
|
|
23
25
|
|
24
26
|
|
4
追記
test
CHANGED
@@ -29,3 +29,9 @@
|
|
29
29
|
|
30
30
|
|
31
31
|
エラーから逆算するとそういうことと推測します。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
分散処理のワーカープロセスを実行していて、そちらで非pickle化されていると想像しました。
|
36
|
+
|
37
|
+
encodingの定義をモジュールに分離する必要があるかと思います。
|
3
追記
test
CHANGED
@@ -22,7 +22,9 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
非pickle化する
|
25
|
+
非pickle化する時に別の実行ファイルで起動していて、その中で`from hogehoge import encoding`してクラスを参照していると、encodingクラスの完全修飾名は`hogehoge.encoding`です。かつ、`__main__`は実行に指定したファイルになっています。
|
26
|
+
|
27
|
+
そのため、pickle化されたデータに入っているクラス名の`__main__.encoding`が解決できません。
|
26
28
|
|
27
29
|
|
28
30
|
|
2
些細
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
> '__main__' はトップレベルのコードが実行されるスコープの名前です。
|
17
|
+
> `'__main__'` はトップレベルのコードが実行されるスコープの名前です。
|
18
18
|
|
19
19
|
|
20
20
|
|
1
途中で投稿された
test
CHANGED
@@ -3,3 +3,27 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
> 関数 (組込みおよびユーザー定義) は、値ではなく、"完全修飾" された名前参照で pickle 化されます。
|
6
|
+
|
7
|
+
> (略)
|
8
|
+
|
9
|
+
> クラスも同様に名前参照で pickle 化されるので、unpickle 化環境には同じ制限が課せられます。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
[https://docs.python.org/ja/3/library/__main__.html#module-__main__](https://docs.python.org/ja/3/library/__main__.html#module-__main__)
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
> '__main__' はトップレベルのコードが実行されるスコープの名前です。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
なので、実行したファイル(`python hogehoge.py`で実行した時のhogehoge.py)で定義されたクラスをpickle化した時、pickle化されたデータに入っているクラス名は(`hogehoge.encoding`ではなく)`__main__.encoding`になります。
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
非pickle化する方が別の実行ファイルで、その中で`from hogehoge import encoding`してクラス名を解決している時、encodingクラスの完全修飾名は`hogehoge.encoding`です。かつ、`__main__`は実行に指定したファイルになっているので`__main__.encoding`が解決できません。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
エラーから逆算するとそういうことと推測します。
|