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 :

Déploiement d'une application comportant le module VLC avec PyInstaller


Sujet :

Déploiement/Installation Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Déploiement d'une application comportant le module VLC avec PyInstaller
    Bonjour à tous,

    Je développe sous Python 3.6 64 bits une application de classement de fichiers vidéos. Le player utilisé est VLC. Nous sommes arrivés presque au terme et je commence à étudier le problème du déploiement futur du logiciel.
    Pour ce faire, j'utilise PyInstaller. Les tests préliminaires étaient plutôt encourageants jusqu'à ce que j'essaie d'inclure le module VLC. J'ai essayé toutes les solutions possibles et je n'ai pas réussi à générer un exécutable fonctionnel. Voici le contenu du fichier .spec :
    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
    # -*- mode: python ; coding: utf-8 -*-
     
    block_cipher = None
     
     
    a = Analysis(['main.py'],
                 pathex=['C:\\VideoFinder1'],
                 binaries=[('C:/VideoFinder1/VLC/plugins', 'VLC/plugins/')],
                 datas=[('*.png', '.'), ('*.ttf', '.'), ('DataMP4.db', '.'), ('myPickleFile', '.'), ('C:/VideoFinder1/VLC', 'VLC/')],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              [],
              exclude_binaries=True,
              name='main',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              console=False )
    coll = COLLECT(exe,
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=True,
                   upx_exclude=[],
                   name='main')
    Ma question est double :
    1 - Quelqu'un pourrait identifier l'erreur qui bloque l'exécutable généré
    2 - Le cas échéant, quelqu'un connaitrait un player vidéo (image et son) qui pourrait remplacer VLC.

    Merci d'avance.

    Charles

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Après avoir lu la documentation, il faut regarder sur Internet ce que d'autres ont fait pour résoudre ce genre de problème.

    Vous avez par exemple cette discussion qui donne quelques idées (ainsi que d'autres).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Le player vlc est super pratique. Il est présent sous de nombreuses plateformes, et il "avale" à peu près n'importe quoi. Mais l'utiliser avec Python pose un petit problème: à ma connaissance, il ne peut être utilisé que sur un OS qui a déjà vlc d'installé, et à la bonne version (vlc 64bits pour Python 64 bits).

    Je viens de faire l'essai, et ça marche:

    - j'utilise Python 3.7 64 bits et PyQt5 5.15, ainsi que vlc 3 64bits (important!)
    - j'installe avec pip le module "Python-vlc"
    - je charge l'exemple trouvé ici sur le site videolan: https://git.videolan.org/?p=vlc/bind...amples;hb=HEAD. Comme j'utilise PyQt5, j'ai choisi "pyqt5vlc.py" (cliquer sur raw).
    - sans rien changer à cet exemple, je l'exécute et ça marche: j'ai bien la fenêtre, et je peux voir des vidéos.
    - Pour convertir en exe, j'utilise pyinstaller, mais je n'utilise pas les fichiers .spec: je construis un fichier .bat (sous Windows) avec le contenu suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SET programme=testvlc
     
    pyinstaller ^
    --clean ^
    --noconfirm ^
    --noconsole ^
    --onefile ^
    --noupx ^
    --icon ".\%programme%.ico" ^
    %programme%.py
    PAUSE
    En ajoutant, bien sûr une icone pour l'exe.

    Et la version exe marche aussi bien. Mais cet exe ne fonctionnera que sur un PC qui a déjà vlc 64bits d'installé.

    En dehors de vlc, il y a possibilité de faire un lecteur vidéo avec PyQt5 qui, lui, pourra s'exécuter en exe sous Windows sans aucune obligation d'installation (ni Python ni PyQt5). Si vous êtes intéressé, je peux regarder ce que j'ai sur le sujet.

    [edit] Sous PyQt5, voilà déjà une version minimale d'un lecteur vidéo:

    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
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import sys
    import os
     
    from PyQt5 import QtWidgets, QtGui, QtCore, QtMultimedia, QtMultimediaWidgets 
     
    ##############################################################################
    class VideoWindow(QtWidgets.QWidget):
     
        #=========================================================================
        def __init__(self, parent=None):
            super().__init__(parent)
            self.resize(600, 400)
            self.setWindowTitle("Vidéo")
     
            self.mediaplayer = QtMultimedia.QMediaPlayer()
            self.videoWidget = QtMultimediaWidgets.QVideoWidget()
            self.mediaplayer.setVideoOutput(self.videoWidget)
     
            layout = QtWidgets.QGridLayout()
            layout.addWidget(self.videoWidget, 0, 0)
            self.setLayout(layout)
     
        #=========================================================================
        def play(self, fichier):
            self.mediaplayer.setMedia(QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(fichier)))
            self.mediaplayer.play()
     
    ##############################################################################
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
     
        player = VideoWindow()
        player.show()
     
        fichier = r"W:\video\clips\CarlyRaeJepsen_CallMeMayBe.mp4" # <= à adapter!
        player.play(fichier)
     
        sys.exit(app.exec_())
    Il faudrait, bien sûr, ajouter les mécanismes de contrôle en fonction de l'utilisation envisagée. Il existe pour ça de la doc et des exemples chez riverbank (télécharger la version source de PyQt5 qui a les exemples).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Tout d'abord merci infiniment pour la précision de votre réponse.

    Dans un premier temps, j'ai téléchargé le script PyQ5VLC (ainsi que la version tkinter, l'application que nous développons utilise largement cette GUI). Les 2 scripts ont fonctionné parfaitement.
    J'ai lancé le script .bat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SET programme=PyQt5VLC
    pyinstaller ^
    --clean ^
    --noconfirm ^
    --noconsole ^
    --onedir ^
    --noupx ^
    --icon ".\pictures.ico" ^
    %programme%.py
    PAUSE
    Le fichier spec généré est le suivant :
    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
     
    # -*- mode: python ; coding: utf-8 -*-
     
    block_cipher = None
     
     
    a = Analysis(['PyQt5VLC.py'],
                 pathex=['C:\\pythonProject'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              [],
              exclude_binaries=True,
              name='PyQt5VLC',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=False,
              console=False , icon='pictures.ico')
    coll = COLLECT(exe,
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=False,
                   upx_exclude=[],
                   name='PyQt5VLC')
    L'opération s'est déroulée sans problème. J'ai lancé l'exécutable et un message d'erreur s'est affiché : "Failed to execute script PyQt5VLC".

    Parallèlement j'ai téléchargé le player Qt5.
    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
     
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import sys
    import os
     
    from PyQt5 import QtWidgets, QtGui, QtCore, QtMultimedia, QtMultimediaWidgets
     
     
    ##############################################################################
    class VideoWindow(QtWidgets.QWidget):
     
        # =========================================================================
        def __init__(self, parent=None):
            super().__init__(parent)
            self.resize(600, 400)
            self.setWindowTitle("Vidéo")
     
            self.mediaplayer = QtMultimedia.QMediaPlayer()
            self.videoWidget = QtMultimediaWidgets.QVideoWidget()
            self.mediaplayer.setVideoOutput(self.videoWidget)
     
            layout = QtWidgets.QGridLayout()
            layout.addWidget(self.videoWidget, 0, 0)
            self.setLayout(layout)
     
        # =========================================================================
        def play(self, fichier):
            self.mediaplayer.setMedia(QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(fichier)))
            print(QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(fichier)))
            self.mediaplayer.play()
     
     
    ##############################################################################
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
     
        player = VideoWindow()
        player.show()
     
        fichier = "c:\pythonProject\malinois.mp4"  # <= à adapter!
        player.play(fichier)
     
        sys.exit(app.exec_())
    Il semble fonctionner mais la vidéo ne semble pas démarrer. Peut-être est-ce dû à l'absence de commandes même si, logiquement, la méthode play() devrait lancer la lecture.
    Merci encore pour votre aide.

    Charles GRIFFE

Discussions similaires

  1. Déploiement d'une application.
    Par Whenseslass dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 03/08/2006, 17h18
  2. Tomcat 5.5: déploiement d'une application, config server.xml
    Par yizashi dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 02/04/2006, 17h20
  3. [Déploiement] Diffuser une application java
    Par lilli1407 dans le forum EDI et Outils pour Java
    Réponses: 2
    Dernier message: 31/01/2006, 16h49
  4. [D7][ORACLE 8i] déploiement d'une application
    Par Magnus dans le forum Bases de données
    Réponses: 3
    Dernier message: 03/10/2005, 16h40
  5. Réponses: 2
    Dernier message: 15/04/2002, 12h56

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