#python #matplotlib #pyinstaller
#python #matplotlib #pyinstaller
Вопрос:
При попытке создать .exe
с помощью Pyinstaller выдается эта ошибка:
133235 INFO: Loading module hook 'hook-matplotlib.backends.py' from 'c:\users\jimit vaghela\appdata\local\programs\python\python37\lib\site-packages\PyInstaller\hooks'...
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libsite-packagesmatplotlib__init__.py", line 901, in <module>
fail_on_error=True)
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libsite-packagesmatplotlib__init__.py", line 796, in _rc_params_in_file
with _open_file_or_url(fname) as fd:
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libcontextlib.py", line 112, in __enter__
return next(self.gen)
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libsite-packagesmatplotlib__init__.py", line 770, in _open_file_or_url
fname = os.path.expanduser(fname)
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libntpath.py", line 291, in expanduser
path = os.fspath(path)
TypeError: expected str, bytes or os.PathLike object, not WindowsPath
134074 INFO: Loading module hook 'hook-matplotlib.py' from 'c:\users\jimit vaghela\appdata\local\programs\python\python37\lib\site-packages\PyInstaller\hooks'...
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libsite-packagesmatplotlib__init__.py", line 901, in <module>
fail_on_error=True)
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libsite-packagesmatplotlib__init__.py", line 796, in _rc_params_in_file
with _open_file_or_url(fname) as fd:
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libcontextlib.py", line 112, in __enter__
return next(self.gen)
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libsite-packagesmatplotlib__init__.py", line 770, in _open_file_or_url
fname = os.path.expanduser(fname)
File "c:usersjimit vaghelaappdatalocalprogramspythonpython37libntpath.py", line 291, in expanduser
path = os.fspath(path)
TypeError: expected str, bytes or os.PathLike object, not WindowsPath
Я нашел решение, опубликованное в Stackoverflow, в котором указано, что необходимо вставить код в backend.py
в папке Pyinstaller. Но это тоже не работает.
Что здесь происходит не так?
Ответ №1:
Итак, я выяснил, что matplotlib
была проблема. Исключение этого в аргументе модуля в Pyinstaller исправило это.
Вот так:
pyinstaller --exclude-module matplotlib main.py
Комментарии:
1. Но что, если кто-то хочет фактически включить matplotlib?
2. В то время у matplotlib возникали проблемы с конфликтом с Pyinstaller, даже базовые crud-приложения не работали с pyinstall, в котором в любом случае был задействован matplotlib. Я не уверен, что вызывает ошибку здесь.
3. @WouterLievens Может быть, вы могли бы понизить версию вашего matplotlib, которая вроде как помогла одному пользователю в прошлом, когда я искал решения.
4. @WouterLievens, не могли бы вы, пожалуйста, уточнить?
Ответ №2:
В настоящее время это проблема с matplotlib
.
Я решил это, отредактировав исходный файл. Если вы не хотите редактировать исходный файл, говорят, что для устранения этой проблемы могут быть установлены более низкие версии matplotlib
like 3.0.3
.
В моем случае это не сработало. В любом случае, ниже приведены шаги, которые я предпринял.
Сначала откройте интерпретатор Python и скопируйте путь, который вы получите в качестве выходных данных.
>>> import matplotlib
>>> matplotlib.get_data_path() # copy the below path
'C:\<Python Path>\lib\site-packages\matplotlib\mpl-data'
Далее откройте файл C:<Python Path>libsite-packagesPyInstallerhookshook-matplotlib.py
. Просто на всякий случай сделайте резервную копию этого файла, если вам нужно
from PyInstaller.utils.hooks import exec_statement
# old line; delete this
mpl_data_dir = exec_statement(
"import matplotlib; print(matplotlib.get_data_path())")
# Add this line
mpl_data_dir = 'C:\<Python Path>\lib\site-packages\matplotlib\mpl-data'
assert mpl_data_dir, "Failed to determine matplotlib's data directory!"
datas = [
(mpl_data_dir, "matplotlib/mpl-data"),
]
И не забудь сохранить.