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

Py2exe Python Discussion :

problème de compilation/execution avec le module soundfile et libsndfile


Sujet :

Py2exe Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D

    Informations forums :
    Inscription : avril 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut problème de compilation/execution avec le module soundfile et libsndfile
    Bonjour à tous,

    J’essaie de créer un exécutable avec py2exe et python 3.4 sous Windows 10.

    Ci-dessous, une version simplifiée de mon programme, mais qui ne fait que lire les fichiers audio dans un dossier et les écrire dans un autre dossier.
    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
    import os
    import soundfile as snd
    baseDir = r"C:\pAcapela"
    inputDir = os.path.join(baseDir, "inputAudio")
    outputDir = os.path.join(baseDir, "outputAudio")
    os.makedirs(outputDir, exist_ok=True)
    # test
    for path, dirs, files in os.walk(inputDir):
        for sentence in files:
            filename = os.path.join(path, sentence)
            print(filename)
            y, sr = snd.read(filename)
            # traitements ...
     
     
            # sauvergarde audio
            filesp = os.path.join(outputDir, sentence)
            snd.write(filesp, y, sr)
    Le code s’execute sans problème (en supposant que le répertoire C:\pAcapela\ inputAudio existe et contient des .wav)

    J’ai crée un setup.py basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from distutils.core import setup
    import py2exe
     
    packages = []
    setup(
        console=['testEasy.py'],
        options={
            "py2exe": {
                "packages": packages
            }
        }
    )
    La commande : python setup.py py2exe me donne le log suivant :

    running py2exe
    Error: Namespace packages not yet supported: Skipping package 'win32com.gen_py'

    12 missing Modules
    ------------------
    ? backports.ssl_match_hostname imported from setuptools.ssl_support
    ? distutils._msvccompiler imported from setuptools.monkey
    ? mklfft imported from numpy.fft
    ? pkg_resources.extern.appdirs imported from pkg_resources
    ? pkg_resources.extern.packaging imported from pkg_resources, setuptools.command.egg_info, setuptools.dist
    ? pkg_resources.extern.six imported from pkg_resources
    ? readline imported from cmd, code, pdb
    ? sets imported from nose.util, numpy.distutils.command.build_ext, numpy.distutils.fcompiler, numpy.distutils.misc_util
    ? setuptools.extern.six imported from setuptools, setuptools.command.bdist_egg, setuptools.command.develop, setuptools.command.easy_install, setuptools.command.egg_info, setuptools.command.sdist, setuptools.command.setopt, setuptools.depends, setuptools.dist, setuptools.extension, setuptools.monkey, setuptools.package_index, setuptools.sandbox, setuptools.ssl_support, setuptools.unicode_utils
    ? setuptools_svn imported from setuptools.command.egg_info
    ? urllib.splittag imported from setuptools.py26compat
    ? wincertstore imported from setuptools.ssl_support

    2 submodules that appear to be missing, but could also be global names in the parent package
    ---------------------------------------------------------------------------------------------
    ? numpy.core.intp imported from numpy.linalg.linalg
    ? numpy.core.object_ imported from numpy.linalg.linalg
    Building 'dist\testEasy.exe'.
    Building shared code archive 'dist\library.zip'.
    Copy c:\users\laure\anaconda3\envs\py34\python34.dll to dist
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\win32\_win32sysloader.pyd to dist\_win32sysloader.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\pyexpat.pyd to dist\pyexpat.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\_ssl.pyd to dist\_ssl.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\_cffi_backend.pyd to dist\_cffi_backend.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\select.pyd to dist\select.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\win32\win32evtlog.pyd to dist\win32evtlog.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\numpy\core\umath.pyd to dist\numpy.core.umath.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\_multiprocessing.pyd to dist\_multiprocessing.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\unicodedata.pyd to dist\unicodedata.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\numpy\linalg\lapack_lite.pyd to dist\numpy.linalg.lapack_lite.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\_lzma.pyd to dist\_lzma.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\win32\win32pdh.pyd to dist\win32pdh.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\numpy\linalg\_umath_linalg.pyd to dist\numpy.linalg._umath_linalg.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\numpy\core\multiarray.pyd to dist\numpy.core.multiarray.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\_socket.pyd to dist\_socket.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\Pythonwin\win32ui.pyd to dist\win32ui.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\_ctypes.pyd to dist\_ctypes.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\_hashlib.pyd to dist\_hashlib.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\numpy\fft\fftpack_lite.pyd to dist\numpy.fft.fftpack_lite.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\numpy\random\mtrand.pyd to dist\numpy.random.mtrand.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\DLLs\_bz2.pyd to dist\_bz2.pyd
    Copy C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\win32\win32api.pyd to dist\win32api.pyd
    Copy DLL C:\Users\laure\Anaconda3\envs\py34\Library\bin\mkl_intel_thread.dll to dist\
    Copy DLL C:\Users\laure\Anaconda3\envs\py34\MSVCR100.dll to dist\
    Copy ExtensionDLL C:\Users\laure\Anaconda3\envs\py34\pywintypes34.dll to dist\
    Copy ExtensionDLL C:\Users\laure\Anaconda3\envs\py34\pythoncom34.dll to dist\
    Ça me produit un executable dans le répertoire “dist”.
    Bon. Sauf que si j’exécute celui-ci, j’obtiens les erreurs suivantes :

    Traceback (most recent call last):
    File "C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\soundfile.py", line 142, in <module>
    raise OSError('sndfile library not found')
    OSError: sndfile library not found

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "testEasy.py", line 8, in <module>
    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
    File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
    File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
    File "C:\Users\laure\Anaconda3\envs\py34\lib\site-packages\soundfile.py", line 163, in <module>
    _path, '_soundfile_data', _libname))
    OSError: cannot load library 'C:\Users\laure\PycharmProjects\debruiteAcapela\dist\_soundfile_data\libsndfile64bit.dll': error 0x7e

    Bon, je suppose qu’il y a un problème avec libsndfile. Pourtant, il y a bien un fichier libsndfile64bit.dll quelque part dans C:\Users\laure\Anaconda3\envs\py34\lib\…

    Est-ce que l’un d’entre vous pourrait m’aider à résoudre mon problème?

    Merci d’avance.

  2. #2
    Membre averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2016
    Messages : 154
    Points : 342
    Points
    342
    Par défaut
    Bonjour en essyant comme ca ?

    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
     
    from distutils.core import setup
    import py2exe
     
    packages = []
    includes = ['soundfile']
    setup(
        console=['testEasy.py'],
        options={
            "py2exe": {
                "packages": packages
                "include": includes
            }
        }
    )
    nb: j'ai jamais utilisé py2exe mais en cherchant un peu j'ai trouvé cette solution

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D

    Informations forums :
    Inscription : avril 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Merci pour ta suggestion, zancrows. Malheureusement, ça ne résout pas le problème.
    Cela dit, ça m'a permis de creuser un peu plus.

    J'ai lu que "soundfile" dépend du paquet "cffi". Ajouter ce dernier dans "includes" ne change rien.
    cffi signifie "C Foreign Function Interface" for Python. cffi permet d'inclure du code C dans un module python.
    Je pense que mon problème vient de là. cffi permet l'intégration d'une librairie en C, en l'occurrence libsndfile, dans le code python.
    J'arrive à lancer mon code avec python mais je ne parviens pas à en faire un "standalone" avec py2exe.
    Je pense que c'est un problème d'interface C/python.

    Je suis preneur de toute suggestion/idée.

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D

    Informations forums :
    Inscription : avril 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonsoir à tous,
    J’ai résolu mon problème !
    C’était plus simple que je ne pensais.

    C’est le post suivant qui m’a mis sur le chemin : https://github.com/bastibe/SoundFile/issues/163
    Pyinstaller est utilisé dans ce post, mais le problème est le même.
    ”The rationale is that PySoundFile first searches for any locally-installed sndfile (the first try). Only when this is not found, it searches for the PySoundFile-provided libsndfileXX.dll in _soundfile_data.”
    Du coup, j’ai recopié le dossier “C:\Users\laure\Anaconda3\envs\py34\Lib\site-packages\_soundfile_data » dans le répertoire nouvellement créé « dist ».
    Le répertoire _soundfile_data contient libsndfile64bit.dll .
    C’était aussi simple que ça !
    J’espère que mon post pourra servir à d’autres personnes.
    Cdlt

Discussions similaires

  1. [Compiler] Problème de compilation standalone avec MCR
    Par Dardie dans le forum MATLAB
    Réponses: 5
    Dernier message: 07/04/2010, 18h24
  2. Problème de compilation-execution
    Par byonatane dans le forum C
    Réponses: 14
    Dernier message: 02/03/2009, 15h36
  3. probléme de démarrage vista avec le module HPQWMIEX a cessé de fonctionner?
    Par lalouvesijetattrape dans le forum Windows Vista
    Réponses: 3
    Dernier message: 24/06/2008, 18h32
  4. Problème pour compiler Ogre avec VS 2005
    Par Oxideur dans le forum Ogre
    Réponses: 2
    Dernier message: 01/03/2007, 18h33
  5. Enregistrer , compiler , exécuter avec Emacs
    Par Bibouda dans le forum Applications et environnements graphiques
    Réponses: 9
    Dernier message: 04/11/2005, 08h12

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