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

Python Discussion :

reportlab et pyinstaller


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut reportlab et pyinstaller
    je dois sauvegarder un fichier PDF dont le nom peut être soit en hébreux arabe ou thai ou japonnais par exemple
    le code fonctionnement correctement sous pycharm
    une fois le compilation par pyinstaller, seul les nom de fichier ascii sont créés mais pas ceux ayant les caractère propre à leur unicode.
    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
     
       # ------- Dossier & Nom Fichier PDF Cible -------
        Dossier_Cible = 'Recettes'
        Nom_File = Nom_Rec.get()
        # print("...........", Nom_File)
     
        # Vérifie la présence du dossier cible
        try:
            os.makedirs(Dossier_Cible)
            print("Le dossier  -->  ", Dossier_Cible,  " est créé")
            print("Vérification de l'existance du dossier ", os.path.isdir('./' + Dossier_Cible))
        except FileExistsError:
            print("Le dossier  -->  ", Dossier_Cible,  " exite déjà")
            print("Vérification de l'existance du dossier ", os.path.isdir('./' + Dossier_Cible))
     
        # Identification du chemin de l'application
        PathApp = os.getcwd()
        print("Identification du chemin de l'application        ", os.getcwd())
        print("Full Path        ", PathApp + "/" + Dossier_Cible + "/" + Nom_File + ".pdf")
     
        # Attribution du chemin cible
        # pdf = canvas.Canvas(PathApp + "/" + Dossier_Cible + "/" + Nom_File + ".pdf", pagesize=landscape(A4))
        pdf = canvas.Canvas( "./" + Nom_File + ".pdf", pagesize=landscape(A4))
     
        # # ------- Nom Recette -------
        flow_Ligne1 = []
        styles = getSampleStyleSheet()
        stl_Recette_EU = ParagraphStyle(
            name='Normal',
            alignment=1,
            fontName='Verdana-Bold',
            fontSize=24,
            textColor="#7E2300",
        )
        stl_Recette_TH = ParagraphStyle(
            name='Normal',
            alignment=1,
            fontName='THSarabun-Bold',
            fontSize=24,
            textColor="#7E2300",
        )
        stl_Recette_AR = ParagraphStyle(
            name='Normal',
            alignment=1,
            fontName='arabtype',
            fontSize=24,
            textColor="#7E2300",
        )
     
        # Vérification que la chaîne (Nom_File) ne contient que des caractères ASCII
        NO_ASCII = ""
        try:
            New_Nom_File = Nom_File.encode('ascii')
            flow_Ligne1.append(Paragraph(New_Nom_File, style=stl_Recette_EU))
        except UnicodeEncodeError:
            print("there are non-ascii characters in there")
            NO_ASCII = "YES"
     
        # Identification de la langue utilisée pour le titre de la recette puis orientation vers la bon style
        if NO_ASCII == "YES":
     
     
            # Méthode II
            from langdetect import detect_langs
            def ID_lang(Nom_File):
                res = detect_langs(Nom_File)
                for item in res:
                    if item.lang == "th" or item.lang == "ar":
                        return item.lang
                return None
     
            # print("-------------", ID_lang(string))  # fr
            if ID_lang(Nom_File) == "th":
                print("Thaïlandais", ID_lang(Nom_File))
                Nom_File = Nom_File.encode('utf-8')
                flow_Ligne1.append(Paragraph(Nom_File, style=stl_Recette_TH))
    je pense que le nom de fichier dit être traité, comment, c'est ce que je cherche à savoir. une idée
    merci de votre temps

  2. #2
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    1ère chose Pyinstaller ne compile pas, il "gèle" vos dépendances et votre programme pour en faire quelque chose de "portable", notez bien les guillemets car il n'est pas rare qu'il fasse fournir des DLL par exemple.
    de même dépendances peut être pris au sens large, ça peut être une image, ou une police de caractère, ect


    impossible de reproduire sans le code complet (ou mieux un code minimal montrant le problème) ni comment vous utilisez pyinstaller

    quel est votre besoin actuellement ?
    si le but est de déployer une application sur un grand nombre de poste il existe d'autres moyens, il faudrait savoir l'environnement (sur quel OS ?, vous disposez de quels accès ? (ssh ? accès root/administrateur ? ect ..))

    ps: vous devriez regarder pathlib, avant je n'utilisais que os.path et os.getcwd et je pensais que pathlib était une bibliothèque inutile, puis en l'utilisant je me suis rendu compte que c'était mieux que os.path et beaucoup plus élégant. Fini les nœud au cerveau pour gérer ET mon path ET ce que je veux faire, fini d’enchaîner des fonctions de os.path et avoir le sang qui coule du nez ou devoir passer par 3 variables temporaires

  3. #3
    Invité
    Invité(e)
    Par défaut
    c'est la librairie from langdetect import detect_langs
    qui fait défaut.
    si je fais un test pour le Thai ou arabe pas de soucis.
    donc, il me faut trouver comment configurer ce module dans pyinstaller

    Il y a aussi textblob mais la aussi, ça à l'air compliquer à mettre en place pour pyinstaller

    quelqu'un aurait une diée, s'il vous plaît?

    merci de votre

  4. #4
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Citation Envoyé par taratatasoleil Voir le message
    quelqu'un aurait une diée, s'il vous plaît?
    prendre en compte les messages essayant de vous aider ?

  5. #5
    Invité de passage
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pakistan

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2020
    Messages : 1
    Par défaut Suggestion
    Essayez le paramètre "--onefile" dans pyinstaller comme indiqué dans cet article.

  6. #6
    Invité
    Invité(e)
    Par défaut
    j'ai résolu le probléme avec le module --> LangID

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            # Méthode module LangID
            import langid                                                                                             # Méthode module LangID
            print("LangID       --> ", langid.classify(Nom_File))                                        # Identification ID Lang sous forme de tableau
            ID_Lang = langid.classify(Nom_File)                                                            # exemple sous form de tableau : ('th', -156.31221795082092)
            print("ID Lang      --> ", ID_Lang[0])                                                           # exemple : th
     
            if ID_Lang[0] == "th":
                flow_Ligne1.append(Paragraph(Nom_File, style=stl_Recette_TH))
            if ID_Lang[0] == "ar":
                flow_Ligne1.append(Paragraph(Nom_File, style=stl_Recette_AR))
    merci à tous de votre temps

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PyInstaller, un tuto ?
    Par rambc dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 28/02/2009, 11h30
  2. Fichier Version PyInstaller
    Par metalamania dans le forum Déploiement/Installation
    Réponses: 2
    Dernier message: 30/07/2008, 22h59
  3. Compilation avec PyInstaller
    Par Jiyuu dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 29/04/2008, 20h01
  4. Programme pour PyInstaller
    Par metalamania dans le forum Déploiement/Installation
    Réponses: 3
    Dernier message: 01/06/2007, 16h16
  5. pyinstaller sous Linux
    Par jbjweb dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 20/02/2007, 21h00

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