В PyInstaller нет модуля с именем 'pandas._libs.tslibs.timedeltas'
Я пытаюсь обернуть скрипт Python в exe, используя PyInstaller (версия для разработки) для Windows.
Сценарий использует Pandas, и я запускал ошибку при запуске 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.
Я пробовал делать это для программ без панд, и все было в порядке.
Это очень похоже на другой вопрос, уже разрешенный для Python 2, но я использую Python 3, и это решение не применяется одинаково из-за измененного формата файла.spec.
Python 3.6
PyInstaller - версия 3.3
Пандас - версия 0.20.3
Ответы
Ответ 1
PyInstaller 3.3, Pandas 0.21.0, Python 3.6.1.
Я смог решить эту проблему благодаря еще не опубликованному/исправленному исправлению для PyInstaller, см. Это и это. И сохраняя возможность упаковывать его в один исполняемый файл.
Основном:
-
Найдите папку PyInstaller..\hooks, например C:\Program Files\Python\Lib\site-packages\PyInstaller\hooks
.
-
Создайте файл hook-pandas.py с содержимым (или что-нибудь подобное на основе вашей ошибки):
hiddenimports = ['pandas._libs.tslibs.timedeltas']
-
Сохраните его. Я просто удалил файлы.spec, build и dist, чтобы убедиться.
-
Запустите pyinstaller -F my_app.py.
Это исправление должно работать до тех пор, пока вы не обновите или не переустановите PyInstaller. Поэтому вам не нужно редактировать файл.spec.
Возможно, они будут включать исправление раньше нас! :)
Ответ 2
Я не уверен, что это может вам помочь, но после решения этой должности вы упоминаете работу для меня с python 3.6 pyinstaller 3.3 и pandas 0.21.0 на Windows 7.
Поэтому добавление этого в spec файл сразу после анализа:
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)
Также мой формат файла спецификации совпадает с тем, который вы указываете.
Ответ 3
Мне удалось решить эту проблему, используя флаг "--hidden-import". Надеюсь, это может быть полезно для кого-то другого, который сталкивается с этой нитью.
pyinstaller --onefile --hidden-import pandas._libs.tslibs.timedeltas myScript.py
Ответ 4
Если вы используете Anaconda, весьма вероятно, что когда вы пытались удалить какой-то пакет, он нарушил зависимость от pandas и не смог получить требуемый скрипт. Если вы просто запустите conda install pandas
вы можете получить еще одну ошибку:
module 'pandas' has no attribute 'compat'
.
Итак, попробуйте удалить и переустановить Pandas conda uninstall pandas
, Установите его снова с помощью conda install pandas
Install conda install pandas
это решит проблему. С другой стороны, если вы не используете Anaconda., Попробуйте сделать то же самое в командной строке, указывая на папку скриптов Python pip uninstall pandas & pip install pandas
.
В большинстве случаев это должно решить проблему. Просто чтобы покрыть все возможности, не забудьте запустить Spyder от Anaconda после установки панд.