Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème avec shelve

6 réponses
Avatar
Yann Leboulanger
Bonjour,

j'ai un p'tit soucis avec le module shelve. Mon appli utilise ce module
pour sauver quelques petites choses. shelve utilise par defaut anydbm
pour mettre ca sur le disque dur. Et anydbm utilise dbhash (bsddb) par
defaut.

Jusque la aucun problème. Mais la ou ca commence a moins bien aller,
c'est que par exemple dans gentoo, py27, (et ensuite dans tout py3) il
n'y a plus de module bsddb par defaut. Donc mon appli ne peut plus
ouvrir ses fichiers.

Et je ne vois pas comment preparer cet "evolution". mon appli etant
multi platforme, je ne peux pas la forcer a utiliser gdbm (unix only).
Sous win j'ai l'impression qu'il n'y a que dumbdbm, qui n'est apparement
pas terrible, donc je ne vais pas passer a ca non plus.

Donc une appli utilisant shelve ne peut pas evoluer vers py3 (ou gentoo
py27) sans perdre ses donnees.

Est-ce que quelqu'un voit un moyen de contourner ca ?

Merci,
--
Yann

6 réponses

Avatar
Guillaume Lemaître
Le 09/10/2011 14:17, Yann Leboulanger a écrit :
Bonjour,

j'ai un p'tit soucis avec le module shelve. Mon appli utilise ce module
pour sauver quelques petites choses. shelve utilise par defaut anydbm
pour mettre ca sur le disque dur. Et anydbm utilise dbhash (bsddb) par
defaut.

Jusque la aucun problème. Mais la ou ca commence a moins bien aller,
c'est que par exemple dans gentoo, py27, (et ensuite dans tout py3) il
n'y a plus de module bsddb par defaut. Donc mon appli ne peut plus
ouvrir ses fichiers.

Et je ne vois pas comment preparer cet "evolution". mon appli etant
multi platforme, je ne peux pas la forcer a utiliser gdbm (unix only).
Sous win j'ai l'impression qu'il n'y a que dumbdbm, qui n'est apparement
pas terrible, donc je ne vais pas passer a ca non plus.

Donc une appli utilisant shelve ne peut pas evoluer vers py3 (ou gentoo
py27) sans perdre ses donnees.

Est-ce que quelqu'un voit un moyen de contourner ca ?

Merci,



Bonjour,

Ce qui m'étonne c'est que anydbm est là pour abstraire le véritable
moteur de BDD utilisé. Au pire il doit retomber tout seul sur dumbdbm si
aucune implémentation performante pour la machine hôte n'est disponible.

Les différents moteurs dbhash, gdbm et dbm sont donc incompatibles au
niveau binaire ? Ou bien l'adhérence à dbhash ressort dans votre
application ?

Guillaume
Avatar
Yann Leboulanger
On 10/09/2011 03:52 PM, Guillaume Lemaître wrote:
Ce qui m'étonne c'est que anydbm est là pour abstraire le véritable
moteur de BDD utilisé. Au pire il doit retomber tout seul sur dumbdbm si
aucune implémentation performante pour la machine hôte n'est disponible.



La base etant au depart créée avec une version de python supportant
dbhash, anydb l'utilise. Ensuite on met a jour python avec une version
ne supportant plus dbhash, et du coup la base n'est plus lisible.

Les différents moteurs dbhash, gdbm et dbm sont donc incompatibles au
niveau binaire ? Ou bien l'adhérence à dbhash ressort dans votre
application ?



Effectivement je pense que ces 3 modules sont tout simplement incompatibles.

--
Yann
Avatar
Alain Ketterlin
Yann Leboulanger writes:

j'ai un p'tit soucis avec le module shelve. Mon appli utilise ce
module pour sauver quelques petites choses. shelve utilise par defaut
anydbm pour mettre ca sur le disque dur. Et anydbm utilise dbhash
(bsddb) par defaut.

Jusque la aucun problème. Mais la ou ca commence a moins bien aller,
c'est que par exemple dans gentoo, py27, (et ensuite dans tout py3) il
n'y a plus de module bsddb par defaut. Donc mon appli ne peut plus
ouvrir ses fichiers.



Oui, shelve n'est qu'un surcouche au-dessus du moteur (par ex. dbm). Un
moteur ne pourra pas lire les données d'un autre.

Et je ne vois pas comment preparer cet "evolution". mon appli etant
multi platforme, je ne peux pas la forcer a utiliser gdbm (unix only).
Sous win j'ai l'impression qu'il n'y a que dumbdbm, qui n'est
apparement pas terrible, donc je ne vais pas passer a ca non plus.

Donc une appli utilisant shelve ne peut pas evoluer vers py3 (ou
gentoo py27) sans perdre ses donnees.

Est-ce que quelqu'un voit un moyen de contourner ca ?



Note que les modules dbhash et bsddb sont "deprecated" et n'apparaîtro nt
pas dans python 3.

A priori, si c'est possible pour toi, je te recommanderais d'en rester à  
pickle/cPickle.

-- Alain.
Avatar
Yann Leboulanger
On 10/09/2011 06:48 PM, Alain Ketterlin wrote:
Yann Leboulanger writes:

j'ai un p'tit soucis avec le module shelve. Mon appli utilise ce
module pour sauver quelques petites choses. shelve utilise par defaut
anydbm pour mettre ca sur le disque dur. Et anydbm utilise dbhash
(bsddb) par defaut.

Jusque la aucun problème. Mais la ou ca commence a moins bien aller,
c'est que par exemple dans gentoo, py27, (et ensuite dans tout py3) il
n'y a plus de module bsddb par defaut. Donc mon appli ne peut plus
ouvrir ses fichiers.



Oui, shelve n'est qu'un surcouche au-dessus du moteur (par ex. dbm). Un
moteur ne pourra pas lire les données d'un autre.

Et je ne vois pas comment preparer cet "evolution". mon appli etant
multi platforme, je ne peux pas la forcer a utiliser gdbm (unix only).
Sous win j'ai l'impression qu'il n'y a que dumbdbm, qui n'est
apparement pas terrible, donc je ne vais pas passer a ca non plus.

Donc une appli utilisant shelve ne peut pas evoluer vers py3 (ou
gentoo py27) sans perdre ses donnees.

Est-ce que quelqu'un voit un moyen de contourner ca ?



Note que les modules dbhash et bsddb sont "deprecated" et n'apparaîtront
pas dans python 3.

A priori, si c'est possible pour toi, je te recommanderais d'en rester à
pickle/cPickle.



Ok merci, j'ai reecrit cette partie en utilisant cPickle

Dommage shelve etait plus simple, mais c'est qd meme bien pourri de
casser cette compatibilité entre 2 versions de python !
Avatar
Nicolas
Le 11/10/2011 18:48, Yann Leboulanger a écrit :
On 10/09/2011 06:48 PM, Alain Ketterlin wrote:
Yann Leboulanger writes:

j'ai un p'tit soucis avec le module shelve. Mon appli utilise ce
module pour sauver quelques petites choses. shelve utilise par defaut
anydbm pour mettre ca sur le disque dur. Et anydbm utilise dbhash
(bsddb) par defaut.

Jusque la aucun problème. Mais la ou ca commence a moins bien aller,
c'est que par exemple dans gentoo, py27, (et ensuite dans tout py3) il
n'y a plus de module bsddb par defaut. Donc mon appli ne peut plus
ouvrir ses fichiers.



Oui, shelve n'est qu'un surcouche au-dessus du moteur (par ex. dbm). Un
moteur ne pourra pas lire les données d'un autre.

Et je ne vois pas comment preparer cet "evolution". mon appli etant
multi platforme, je ne peux pas la forcer a utiliser gdbm (unix only).
Sous win j'ai l'impression qu'il n'y a que dumbdbm, qui n'est
apparement pas terrible, donc je ne vais pas passer a ca non plus.

Donc une appli utilisant shelve ne peut pas evoluer vers py3 (ou
gentoo py27) sans perdre ses donnees.

Est-ce que quelqu'un voit un moyen de contourner ca ?



Note que les modules dbhash et bsddb sont "deprecated" et n'apparaîtront
pas dans python 3.

A priori, si c'est possible pour toi, je te recommanderais d'en rester à
pickle/cPickle.



Ok merci, j'ai reecrit cette partie en utilisant cPickle

Dommage shelve etait plus simple, mais c'est qd meme bien pourri de
casser cette compatibilité entre 2 versions de python !


N'y a t-il pas possibilité de traduire anydbm en Python3 ?
L'application reste la même et les données chez le client sont toujours
valides.
C'est peut-^tre plus simple que de ré-écrire l'application.

Nicolas
Avatar
Yann Leboulanger
Le 12/10/2011 08:51, Nicolas a écrit :
Le 11/10/2011 18:48, Yann Leboulanger a écrit :
Dommage shelve etait plus simple, mais c'est qd meme bien pourri de
casser cette compatibilité entre 2 versions de python !


N'y a t-il pas possibilité de traduire anydbm en Python3 ?
L'application reste la même et les données chez le client sont toujours
valides.
C'est peut-^tre plus simple que de ré-écrire l'application.



Il faut installer le module python-bsddb, mais il n'y est plus de base
dans python. Je ne sais pas pourquoi il n'est plus integre de base, mais
en tout cas sans cette nouvelle dependance, ce n'est plus lisible.