web-dev-qa-db-fra.com

Aucun module nommé 'pandas._libs.tslibs.timedeltas' dans PyInstaller

J'essaie d'envelopper un script Python) dans un fichier exe utilisant PyInstaller (version de développement) pour Windows.

Le script utilise Pandas et j'ai rencontré une erreur lors de l'exécution de l'exe.

Traceback (most recent call last):   File "site-packages\pandas\__init__.py", line 26, in <module>   File "C:\Users\Eddie\Anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
    exec(bytecode, module.__dict__)   File "site-packages\pandas\_libs\__init__.py", line 4, in <module>   File "C:\Users\Eddie\Anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module
    module = loader.load_module(fullname)   File "pandas/_libs/tslib.pyx", line 1, in init pandas._libs.tslib ModuleNotFoundError: No module named 'pandas._libs.tslibs.timedeltas'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):   File "G5k Version file Extract (with tkinter).py", line 15, in <module>   File "C:\Users\Eddie\Anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
    exec(bytecode, module.__dict__)   File "site-packages\pandas\__init__.py", line 35, in <module> ImportError: C extension: No module named 'pandas._libs.tslibs.timedeltas' not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext --inplace --force' to build the C extensions first.

J'ai essayé de faire cela pour des programmes sans pandas) et tout allait bien.

Ceci est très similaire à ne autre question déjà résolu pour Python 2, mais j'utilise Python 3 et cette solution ne s'applique pas de la même manière en raison du format de fichier modifié .spec.

Python 3.6
PyInstaller - version 3.3
Pandas - version 0.20.3

23
Eduard Fidler

PyInstaller 3.3, Pandas 0.21.0, Python 3.6.1.

J'ai pu résoudre ce problème grâce à un correctif non encore publié/engagé de PyInstaller, voir this et this . ET garder la possibilité de le compresser dans un fichier exécutable.

Fondamentalement:

  1. Recherchez le dossier PyInstaller ..\hooks, par exemple. C:\Program Files\Python\Lib\site-packages\PyInstaller\hooks.

  2. Créez le fichier hook-pandas.py avec le contenu (ou quelque chose de similaire en fonction de votre erreur):

    hiddenimports = ['pandas._libs.tslibs.timedeltas']
    
  3. Enregistrez-le + j'ai supprimé le fichier .spec, construire et dist les dossiers juste pour être sûr.

  4. Courir pyinstaller -F my_app.py.

Ce correctif devrait fonctionner tant que vous ne mettez pas à niveau ou ne réinstallez pas PyInstaller. Donc, vous n'avez pas besoin de modifier le fichier .spec.

Peut-être qu'ils incluront le correctif plus tôt pour nous! :)

48
Petr Szturc

Je ne suis pas sûr que cela puisse vous aider, mais si vous suivez la solution sur le message, vous mentionnez que vous travaillez pour python 3.6 pyinstaller 3.3 et pandas 0.21.0 on Windows 7.

Donc, en ajoutant ceci au fichier de spécifications juste après l'analyse:

def get_pandas_path():
    import pandas
    pandas_path = pandas.__path__[0]
    return pandas_path

dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries)

De plus, mon format de fichier est le même que celui de le message que vous mentionnez .

12
Simon

J'ai réussi à résoudre ce problème en utilisant le drapeau "--hidden-import". Espérons que cela puisse être utile à quelqu'un d'autre qui tombe sur ce fil.

pyinstaller --onefile --hidden-import pandas._libs.tslibs.timedeltas myScript.py
6
Stephan

Si vous utilisez Anaconda, il est fort probable que lorsque vous essayez de désinstaller un paquet, il a interrompu la dépendance pandas et n'a pas pu obtenir le script requis. Si vous exécutez simplement conda install pandas vous pourriez vous retrouver avec une autre erreur:

module 'pandas' has no attribute 'compat'.

Alors, essayez de désinstaller et de réinstaller pandas conda uninstall pandas, Réinstallez-le en utilisant conda install pandas cela résoudra le problème. D'autre part, si vous n'utilisez pas Anaconda., Essayez de faire de même avec une invite de commande pointant vers Python pour les scripts pip uninstall pandas & pip install pandas.

La plupart du temps, cela devrait résoudre le problème. Afin de couvrir toutes les possibilités, n'oubliez pas de lancer Spyder à partir d'Anaconda après avoir installé des pandas.

0
Srini