2016-06-28 31 views
1

我有一個運行在覆盆子pi上的python 3.x客戶端。它通過在PI上進行酸洗並在服務器上取消打開,向運行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.4蟒蛇版的酸洗工作與3.2版相同?

感謝

更新:

的提示用泡菜工具@Dilettant感謝。我在醃菜中發現了一個區別:3.4版本將這個菜單作爲picamera條目進行醃製,3.2將它作爲一個元組保留下來。
3.4結果 - >

530:Q B輸入36
532:K BININT1 0
534:X BINUNICODE '分辨率'
549:Q B輸入37
551:C全局「picamera.mmalobj PiCameraResolution '

3.2 version --> 

830:q B輸入55 832:\ X88 NEWTRUE
833:X BINUNICODE '分辨率'
848:Q B輸入56
850:M BININT2 720
853:M BININT2 480
856:\ 86 TUPLE2

當我修復它,我將發佈結果

+0

在Python 3中添加了協議版本4。4 - 所以也許試圖強制一個較低的協議版本?如果這沒有幫助,也許通過pickletools獲得更多細節? – Dilettant

+0

@Dilettant這個問題與協議4無關。如果是這樣,錯誤會很快發生 – ppperry

+0

我沒有檢查協議,並且都報告了默認值3 –

回答

0

pickle是一種格式,與要序列化的對象的python字節碼緊密相關。字節碼可能會從python版本更改爲其他版本。因此,您只能在使用相同python版本運行的程序之間交換pickeled數據。

您可以使用例如json模塊將您的數據序列化以便將其發送到服務器。

0

感謝@Dilettant,@Sebastian斯蒂格勒,@ ppperry

的問題是基礎PiCamera類提供的酸洗分辨率數據的變化無證。最初它提供了一個Tuple,現在是一個'picamera.mmalobj.PiCameraResolution'對象。我添加了一個檢查來查看對象是否是一個元組,並相應地處理了這些數據。我希望這可以幫助其他人處於相同的位置。

if type(camera.resolution) == tuple: 
     settings["resolution"] = camera.resolution 
    else: 
     settings["resolution"] = (camera.resolution.width,camera.resolution.height) 
相關問題