2016-06-28 1 views
1

私はラズベリーpiで動作するpython 3.xクライアントを持っています。これは、PIをpickleingしてサーバ上でunpickleを実行することによって、winpython 3.4を実行しているサーバにカメラ設定情報を提供します。3.2(wheezy)と3.4(jessie)の間の酸洗されたデータの違いは何ですか?

piは喘鳴とのpython 3.2を実行しているとき、これが正常に動作しますが、私はPI走行ジェシーとPython 3.4でそれをしようとすると化したりunpickle化したり、エラーで、サーバー上の失敗:

File "C:\Python34\Lib\site-packages\dill\dill.py", line 260, in loads 
    return load(file) 

    File "C:\Python34\Lib\site-packages\dill\dill.py", line 250, in load 
    obj = pik.load() 

    File "C:\Python34\lib\pickle.py", line 1036, in load 
    dispatch[key[0]](self) 

    File "C:\Python34\lib\pickle.py", line 1323, in load_global 
    klass = self.find_class(module, name) 

    File "C:\Python34\Lib\site-packages\dill\dill.py", line 406, in find_class 
    return StockUnpickler.find_class(self, module, name) 

    File "C:\Python34\lib\pickle.py", line 1373, in find_class 
    __import__(module, level=0) 

**ImportError: No module named 'picamera'** 

あなたとエラーから見ることができます、これは私がサーバーにDillをインストールした後ですが、私はまだ同じ基本的なエラーを取得、それはpicameraを見つけることができません。

私はPICameraをサーバーにインストールしましたが、もちろんこれはRaspberry Iファイルを探す際に失敗しますのでアンインストールしてください。

3.2バージョンと同じように動作する3.4のpythonバージョンの酸洗いをする方法があれば、誰にも分かりますか?

おかげ

更新:ピクルスツールを使用するためのヒントについて

@Dilettant感謝。私はpickle内に違いがあることを発見しました:3.4バージョンは、このアイテムをピクチャエントリとしてピクルスします。3.2はタプルとして残します。
3.4結果 - >

530:Q BINPUT 36
532:K BININT1 0
534:X BINUNICODE '解像度'
549:Q BINPUT 37
551:GLOBAL「picamera.mmalobjのPiCameraResolution C 「

3.2 version --> 

830:Q BINPUT 55 832:\ X88 NEWTRUE
833:X BINUNICODE '解像度'
848:qはBINPUT 56
850:M BININT2 720
853:M BININT2 480
856:\ x86のTUPLE2

私はそれを修正するとき、私は結果

+0

プロトコルバージョン4がPython 3で追加されました。4 - おそらく、より低いプロトコルバージョンを強制しようとしますか?これが助けにならないのであれば、ピックレットツールで得られる詳細は多分でしょうか? – Dilettant

+0

@Dilettantこの問題はプロトコル4とは関係ありません。エラーが発生した場合は、ずっと早くエラーが発生します – ppperry

+0

プロトコルをチェックして、両方ともデフォルト値の3を報告しています –

答えて

0

pickleをポストする形式でありますシリアル化するオブジェクトのpythonバイトコードと密接に関連しています。バイトコードはPythonのバージョンから他のバージョンに変わることがあります。そのため、同じpythonバージョンで実行されるプログラム間でのみpickeledデータを交換することができます。

たとえば、jsonモジュールを使用して、サーバーに送信するためにデータをシリアル化できます。

0

おかげ@Dilettant、@Sebastian Stigler、ppperry @

は問題が漬けされている解像度のデータを提供する基地PiCameraクラスに文書化されていない変更です。もともとはTupleを提供していましたが、今は 'picamera.mmalobj.PiCameraResolution'オブジェクトです。オブジェクトがタプルであるかどうかを確認するためのチェックを追加し、それに応じてデータを処理しました。私はこれが他の人を同じ立場に助けてくれることを願っている

if type(camera.resolution) == tuple: 
     settings["resolution"] = camera.resolution 
    else: 
     settings["resolution"] = (camera.resolution.width,camera.resolution.height) 
関連する問題