IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Déploiement/Installation Python Discussion :

Problème avec Sqlite lors de la compilation


Sujet :

Déploiement/Installation Python

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Problème avec Sqlite lors de la compilation
    Bonjour,

    J'essaye tant bien que mal de compiler l'un de mes codes que ce soit avec PyInstaller ou Py2exe. Après plusieurs galères j'ai pu ressortir ce message d'erreur lorsque je double clique sur le .exe créé avec pyInstaller:



    la bdd est pourtant bien là, et je donne le chemin d'accès comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_bdd = os.path.dirname(os.path.abspath(__file__))+'/local_data/mybdd.db'
    La ligne 14 est la ligne ou je me connecte à cette bdd

    J'ai essayé aussi comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_bdd = os.path.dirname(os.path.abspath(__file__))+'\local_data\mybdd.db'
    et voila ce que j'ai

    (J'ai rajouté une ligne dans mon code, ce qui explique que le problème vient de la ligne 15)

    J'espère que vous pourrez m'aider.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Bonjour,

    As-tu essayé de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     my_bdd = os.path.dirname(os.path.abspath(__file__))+'/local_data/mybdd.db'
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     my_bdd = ":memory:"
    Pour voir si c'est un problème de chemin vers un fichier ou autre chose.

    Normalement si Sqlite ne trouve pas le fichier, il le crée.

    C'est peut être que ton fichier est en lecture seul ou qu'il est erroné.

    Bon courage
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par vincent.mbg Voir le message
    Bonjour,

    As-tu essayé de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     my_bdd = os.path.dirname(os.path.abspath(__file__))+'/local_data/mybdd.db'
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     my_bdd = ":memory:"
    Pour voir si c'est un problème de chemin vers un fichier ou autre chose.

    Normalement si Sqlite ne trouve pas le fichier, il le crée.

    C'est peut être que ton fichier est en lecture seul ou qu'il est erroné.

    Bon courage
    Je n'ai pas essayé ceci, je testerai ça dès que possible. Par contre j'ai bien pensé à un problème de chemin. Du coup j'ai remplacé dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_bdd = os.path.dirname(os.path.abspath(__file__))+'/local_data/mybdd.db'
    par

    .

    Si je fais le test directement avec le code source çà marche.
    Par contre avec le fichier compilé, ça ne fonctionne plus.
    Je n'ai pas le message d'erreur sous la main, mais dès que possible je le post.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    J'ai essayé:
    Ça ne fait rien de convainquant? Mais peut-être m'en sers-je mal...
    Pourrais-tu me guider un peu.

    Sinon quelles alternative puis-je avoir car à priori la compilation est pas gagnée, et ça commence à devenir urgent.

    D'avance merci

    [EDIT]
    Si la bdd n'est pas existante je confirme, l'exécutable la créée bien mais le programme ne se lance pas.

    Je confirme aussi que même si je mets cette bdd directement à la racine C:\ le programme ne démarre pas.

    Pffffffffff
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  5. #5
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Bonjour

    J'ai fait un petit prototype qui marche si ça peut aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    import sqlite3 as s
    import time
     
    con = s.connect("mabdd.bdd")
    cur = con.cursor()
     
    cur.execute( "create table if not exists data( text d ) ;")
    # Insertion de l'heure
    heure =  "%s:%s:%s" % (time.localtime()[3], time.localtime()[4],  time.localtime()[5] )
    cur.execute( "insert into data values( '%s' ) ;" %  heure )
    cur.execute( "select * from data ;" )
     
    for heure in cur.fetchall() :
        print heure
     
    cur.close()
    con.commit()
    con.close()
     
    raw_input("pause")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    from distutils.core import setup
    import py2exe
     
     
     
    excludes = ["WSOCK32.dll","USER32.dll" ]
     
    options = {
        "bundle_files": 1,
        "ascii": 1, # to make a smaller executable, don't include the encodings
        "compressed": 1, # compress the library archive
        "excludes": excludes, # COM stuff we don't want
        }
     
     
    setup(
     
        options = {"py2exe": options},
        zipfile = None,
        # The first three parameters are not required, if at least a
        # 'version' is given, then a versioninfo resource is built from
        # them and added to the executables.
        version = "0.5.0",
        description = "py2exe sample script",
        name = "py2exe samples",
     
        # targets to build
        console = ["test_Sqlite.py"],
        )

    Normalement, si ton application plante du doit avoir un fichier nom_de_l'application.log à la racine.

    Ça ne fait rien de convainquant? Mais peut-être m'en sers-je mal...
    Pourrais-tu me guider un peu.
    sqlite.connect( ":memory:" ) crée une bdd en RAM...
    C'était pour voir si c'était un problème de fichier.
    Je ne pense pas que ton problème vient de Sqlite.

    Sinon quelles alternative puis-je avoir car à priori la compilation est pas gagnée, et ça commence à devenir urgent.
    Pour distribuer ton programme ?

    distribue les sources... Et si tu peux pas, les fichiers pré-compilés .pyc
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  6. #6
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    J'ai fait les test avec ton code? Ci-dessous tu trouveras ce que j'obtiens
    Cependant avant tout je préfère te donner aussi mon code où j'appelle ma bdd. Tu trouveras peut-être quelque chose qui bug.

    fichier bdd.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    # -*- coding: utf-8 -*-
    import sqlite3, os, os.path
     
    my_bdd = os.path.dirname(os.path.abspath(__file__))+'\local_data\mybdd.db'
    #my_bdd = 'c:\mybdd.db'
    #my_bdd = ":memory:"
     
    if os.path.exists(my_bdd) == 1:
        pass
    else:
        connection = sqlite3.connect("mybdd.db") 
        c = connection.cursor()
     
        c.execute('''create table prpcalc(
        key, chantier, dept, tn, dessus, fea, dfea, fed, dfed, fer,
        dref, lref, nb_coude, debit, dem, nat_tuy_int, nat_rob, guidage, type_instal, dpr, 
        hpr, vupr, dn_int, L1cav, L2cav, hcav, ppe, qppe, hmtppe, pppe,
        ippe, rppe, uppe, vppe, dppe, nb_ppe, secours, grille, panier, pelle,
        clapet, vanne, dn_rob, cav, couv, vidange, h2s, brassage, agitateur, mano,  
        palan, treuil,com1, platine, coffret, dim_coffret, porte, cd, eclair, pc230,  
        pc24, telealarme, telegestion, debitmetre, dep_sup, balladeuse, detect, poires_sup, limiteur, verine, 
        com2, foudre)''')
        connection.commit()
        c.close()
        connection.close()
     
    def verif(key):
        connection1 = sqlite3.connect(my_bdd)
        c1 = connection1.cursor()
     
        verif = []
        c1.execute('SELECT * FROM prpcalc')
        for row in c1 :
            if row[0] == key:
                verif.append('Erreur')
            else: pass
        return verif
        connection1.commit()
        c1.close()
        connection1.close()
     
    def sauv_prp(data):
        connection1 = sqlite3.connect(my_bdd)
        c1 = connection1.cursor()
     
        data1 = [data]
     
        for t in data1:
            c1.execute('''insert into prpcalc values (
            ?,?,?,?,?,?,?,?,?,?,
            ?,?,?,?,?,?,?,?,?,?, 
            ?,?,?,?,?,?,?,?,?,?,
            ?,?,?,?,?,?,?,?,?,?,
            ?,?,?,?,?,?,?,?,?,?,
            ?,?,?,?,?,?,?,?,?,?,
            ?,?,?,?,?,?,?,?,?,?,
            ?,?)''', t)
     
        connection1.commit()
        c1.close()
        connection1.close()
     
    def rappel(choix, key):
        connect = sqlite3.connect(my_bdd)
        c2 = connect.cursor()
     
        retour_data = []
        c2.execute('SELECT * FROM ' + choix)
        for row in c2 :
            if row[0] == key:
                #print row
                for r in row:
                    retour_data.append(r)  
        c2.close()
        connect.close()
        return retour_data
     
    def liste(choix):
        connect = sqlite3.connect(my_bdd)
        c2 = connect.cursor()
     
        liste_projet = []
        c2.execute('SELECT * FROM ' + choix)
        for row in c2 :
            liste = [row[2], row[1]]
            liste_projet.append(liste)
        c2.close()
        connect.close()
        return liste_projet
     
    def delete(select):
        connection1 = sqlite3.connect(my_bdd)
        c1 = connection1.cursor()
        c1.execute("delete from prpcalc where key = '%s'"%select)
        connection1.commit()
        c1.close()
        connection1.close()


    Cette capture correspond à l'essai fait ou j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my_bdd = os.path.dirname(os.path.abspath(__file__))+'\local_data\mybdd.db'
    ...
    connection = sqlite3.connect(mybdd)
    pour définir le chemin d'accès de ma bdd.



    Celle-ci correspond à l'essai où le chemin d'accès à la bdd est défini comme dans le code donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connection = sqlite3.connect("mybdd.db")
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  7. #7
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    C'est bon le problème c'est que si tu écrit sqlite.connect(/toto/mabdd.bd)
    et que /toto n'existe pas, le répertoire ne sera pas crée.

    donc os.mkdir( toto )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    # -*- coding: utf-8 -*-
    import sqlite3, os, os.path
     
    my_bdd = os.path.join( "local_data", "mybdd.db" )
     
    if not os.path.exists( my_bdd ) :
     
        try :
            os.mkdir( "local_data" )
        except :
            pass # Le repertoire local_data existe déjà
        connection = sqlite3.connect( my_bdd ) 
        c = connection.cursor()
     
        c.execute('''create table prpcalc(
        key, chantier, dept, tn, dessus, fea, dfea, fed, dfed, fer,
        dref, lref, nb_coude, debit, dem, nat_tuy_int, nat_rob, guidage, type_instal, dpr, 
        hpr, vupr, dn_int, L1cav, L2cav, hcav, ppe, qppe, hmtppe, pppe,
        ippe, rppe, uppe, vppe, dppe, nb_ppe, secours, grille, panier, pelle,
        clapet, vanne, dn_rob, cav, couv, vidange, h2s, brassage, agitateur, mano,  
        palan, treuil,com1, platine, coffret, dim_coffret, porte, cd, eclair, pc230,  
        pc24, telealarme, telegestion, debitmetre, dep_sup, balladeuse, detect, poires_sup, limiteur, verine, 
        com2, foudre)''')
        connection.commit()
        c.close()
        connection.close()
    Sinon pour la fonction verif il y a un problème

    une fonction se termine par le mot return




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> def foo()
    ...        print 'toto'
    ...        return 42 # La fonction se termine ici
    ...        print 'tata'
     
    >>> foo()
    'toto'
    ainsi dans verif, ces trois lignes ne serra jamais exécutée

    connection1.commit()
    c1.close()
    connection1.close()

    De plus, le commit sert à valider les changement effectué sur une bdd Si tu fait un select, tu n'a pas besoin de faire de commit

    N'hésite pas si tu a encore des soucis.
    A plus.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

Discussions similaires

  1. Problème avec exception lors d'un SplashScreen
    Par yashiro41281 dans le forum Langage
    Réponses: 5
    Dernier message: 10/09/2007, 22h30
  2. [SOLARIS] problème avec rsync lors de la copie
    Par wodel dans le forum Solaris
    Réponses: 0
    Dernier message: 25/08/2007, 13h35
  3. [phpMyAdmin] Problème avec phpMyAdmin lors de l'export de données
    Par shadowbob dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 09/06/2006, 14h12
  4. [AS2] Problème avec ComboBox lors création d'un composant perso
    Par aldo-tlse dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 24/05/2006, 18h51
  5. Problème avec OpenEx lors d'un enregistrement
    Par jessy82 dans le forum MFC
    Réponses: 1
    Dernier message: 05/04/2005, 19h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo