Linuxで作成されたオブジェクトの選択を解除し、(Windowsで)選択を解除しようとすると、モジュールの依存関係の失敗が発生します。ピクルスはLinuxでは正しくピクルスを外しますが、Windowsでは失敗します。どちらのシステムもPython2.6を実行しています。
私はピクルスのマニュアルページ(特にピクルスのない環境をピクルスの環境と同じにすることに焦点を当てています)と、ここでいくつかの素晴らしいアドバイスを研究しましたが、それでも私は困惑しています。ほとんどの人は、sys.modulesが正しくロードされていることを確認するようにアドバイスしています。これが私が試みていることを示すいくつかのスニペットです:
酸洗いコード:
...
pickle_fp = self.getPickleFile('wb')
pickler = Pickler(pickle_fp, protocol=2)
pickler.dump(archive)
pickle_fp.close()
...
選択解除コードに、sys.modulesディクショナリを出力する行を追加して、存在するモジュールを確認できるようにしました。
...
pickle_fp = self.getPickleFile('rb')
unpickler = Unpickler(pickle_fp)
pprint.pprint(sys.modules)
package = unpickler.load()
pickle_fp.close()
...
Linuxでアンピックルを実行すると、うまく機能します。Linux on Windowsで生成されたピクルスを解凍しようとすると、次のようになります。
...
ImportError: No module named photo_data
環境に関してはpprint.pprint(sys.modules)
、Linux上でプロデュース
...
'photo_data': <module 'photo_data' from
'/home/xxx/Desktop/PythonPhoto/photo_data.pyc'>,
...
およびWindowsの場合
...
'photo_data': <module 'photo_data' from
'C:\Users\xxx\git\PhotoManagement\Photo\src\photo_data.pyc'>,
...
したがって、私はphoto_data
その環境にモジュールを持っているように見えます。プロトコルなしでpickleを使用してみました(デフォルトは0)。unix2dosを実行して文字を削除してみました。私は公式に困惑しています。
ご協力いただきありがとうございます!
コメントの提案に基づいて、機能しない最も単純なケースを生成しました。私がピクルスにしているクラスは次のようになります。
class photo_data:
def __init__(self):
self.isdir = False
self.size = 0
self.mtime = -(sys.maxint - 1) #Set default time to very old
self.timestamp = datetime.datetime.strptime('1700:1:1 00:00:00', '%Y:%m:%d %H:%M:%S')
self.gotTags = False
self.signature = ''
self.fileMD5 = ''
self.userTags = ''
self.inArchive = False
self.candidates = []
self.dirpaths = []
self.filepaths = []
class photo_collection: #This class should be data only
def __init__(self):
self.host = ''
self.path = ''
self.photo = dict()
self.pickle = None
self.datasetChanged = False
def __getitem__(self, key):
return self.photo[key]
def __setitem__(self, key, value):
self.photo[key] = value
私のユースケースでは、photo_collection
オブジェクトがインスタンス化され、ディクショナリself.photo
はのインスタンスで埋められますphoto_data
。システム間で機能する最も単純なケースは、1枚の写真が含まれるディレクトリであり、任意に複雑なケースがシステム内で機能します。システム間で機能しない最も単純なケースは、1つの写真を含むディレクトリと、写真を含む1つのサブディレクトリです。
リクエストに応じて、に保存されている2つのピクルスファイルを添付しましたformat = 0
。それらを比較すると、プログラムがファイルツリーを異なる順序で下降していることがわかります(システムとOSの間でディレクトリをコピーしたので、おそらく大きな驚きではありません)が、それ以外の場合は、ファイル以外の同じ構造で開閉するようです-特定のデータ。別の場所にファイルをアップロードする方法がわからないので、ここにインラインで含めます。
これは、Windowsで生成されたピクルスです。
(iphoto_data
photo_collection
p0
(dp1
S'path'
p2
S'C:\\Users\\scott_jackson\\Desktop\\phototest'
p3
sS'host'
p4
S'4DAA1001312'
p5
sS'pickle'
p6
NsS'datasetChanged'
p7
I01
sS'photo'
p8
(dp9
S'C:\\Users\\scott_jackson\\Desktop\\phototest\\img_4697.jpg'
p10
(iphoto_data
photo_data
p11
(dp12
S'isdir'
p13
I00
sS'dirpaths'
p14
(lp15
sS'filepaths'
p16
(lp17
sS'timestamp'
p18
cdatetime
datetime
p19
(S'\x07\xda\x04\x12\x124&\x00\x00\x00'
p20
tp21
Rp22
sS'gotTags'
p23
I01
sS'signature'
p24
S'9b2ca527b2bf0865d9b87ecd2a68d417'
p25
sS'fileMD5'
p26
S''
p27
sS'candidates'
p28
(lp29
sS'mtime'
p30
F1347576558.0
sS'inArchive'
p31
I00
sS'userTags'
p32
S'NA'
p33
sS'size'
p34
L6489323L
sbsg3
(iphoto_data
photo_data
p35
(dp36
g13
I01
sg14
(lp37
S'C:\\Users\\scott_jackson\\Desktop\\phototest\\060101 Nags Head'
p38
asg16
(lp39
g10
asg18
g19
(S'\x06\xa4\x01\x01\x00\x00\x00\x00\x00\x00'
p40
tp41
Rp42
sg23
I00
sg24
g27
sg26
g27
sg28
(lp43
sg30
I-2147483646
sg31
I00
sg32
g27
sg34
I0
sbsS'C:\\Users\\scott_jackson\\Desktop\\phototest\\060101 Nags Head\\img_1150.jpg'
p44
(iphoto_data
photo_data
p45
(dp46
g13
I00
sg14
(lp47
sg16
(lp48
sg18
g19
(S'\x07\xd6\x01\x01\x11\t#\x00\x00\x00'
p49
tp50
Rp51
sg23
I01
sg24
S'5925063685af0d741a23fe6d75523741'
p52
sg26
g27
sg28
(lp53
sg30
F1347751812.0
sg31
I00
sg32
g33
sg34
L538233L
sbsS'C:\\Users\\scott_jackson\\Desktop\\phototest\\060101 Nags Head'
p54
(iphoto_data
photo_data
p55
(dp56
g13
I01
sg14
(lp57
sg16
(lp58
g44
asg18
g19
(S'\x06\xa4\x01\x01\x00\x00\x00\x00\x00\x00'
p59
tp60
Rp61
sg23
I00
sg24
g27
sg26
g27
sg28
(lp62
sg30
I-2147483646
sg31
I00
sg32
g27
sg34
I0
sbssb.
そしてこれはLinuxで生成されたピクルスです:
(iphoto_data
photo_collection
p0
(dp1
S'path'
p2
S'/home/scott/phototest'
p3
sS'host'
p4
S'barney'
p5
sS'pickle'
p6
NsS'datasetChanged'
p7
I01
sS'photo'
p8
(dp9
S'/home/scott/phototest/060101 Nags Head/img_1150.jpg'
p10
(iphoto_data
photo_data
p11
(dp12
S'isdir'
p13
I00
sS'dirpaths'
p14
(lp15
sS'filepaths'
p16
(lp17
sS'timestamp'
p18
cdatetime
datetime
p19
(S'\x07\xd6\x01\x01\x11\t#\x00\x00\x00'
p20
tp21
Rp22
sS'gotTags'
p23
I01
sS'signature'
p24
S'5925063685af0d741a23fe6d75523741'
p25
sS'fileMD5'
p26
S''
p27
sS'candidates'
p28
(lp29
sS'mtime'
p30
F1347751812.0842018
sS'inArchive'
p31
I00
sS'userTags'
p32
S'NA'
p33
sS'size'
p34
I538233
sbsS'/home/scott/phototest/060101 Nags Head'
p35
(iphoto_data
photo_data
p36
(dp37
g13
I01
sg14
(lp38
sg16
(lp39
g10
asg18
g19
(S'\x06\xa4\x01\x01\x00\x00\x00\x00\x00\x00'
p40
tp41
Rp42
sg23
I00
sg24
g27
sg26
g27
sg28
(lp43
sg30
I-9223372036854775806
sg31
I00
sg32
g27
sg34
I0
sbsS'/home/scott/phototest/img_4697.jpg'
p44
(iphoto_data
photo_data
p45
(dp46
g13
I00
sg14
(lp47
sg16
(lp48
sg18
g19
(S'\x07\xda\x04\x12\x124&\x00\x00\x00'
p49
tp50
Rp51
sg23
I01
sg24
S'9b2ca527b2bf0865d9b87ecd2a68d417'
p52
sg26
g27
sg28
(lp53
sg30
F1347576558.5344362
sg31
I00
sg32
g33
sg34
I6489323
sbsg3
(iphoto_data
photo_data
p54
(dp55
g13
I01
sg14
(lp56
S'/home/scott/phototest/060101 Nags Head'
p57
asg16
(lp58
g44
asg18
g19
(S'\x06\xa4\x01\x01\x00\x00\x00\x00\x00\x00'
p59
tp60
Rp61
sg23
I00
sg24
g27
sg26
g27
sg28
(lp62
sg30
I-9223372036854775806
sg31
I00
sg32
g27
sg34
I0
sbssb.
これらをお好きな「比較」エディタに自由に貼り付けてください。問題を検出するのにピクルスについて十分に知りません。
よろしくお願いします!!