PyInstaller с Python: 3.10.0b4 - ImportError: нет модуля с именем _bootlocale
У меня установлена Beta 4 Python 10 (которую я должен использовать, потому что мне действительно нужна функция сопоставления с образцом, доступная только в v3.10):
C:\Users\myname\Documents\Projects\Project Migration\SeleniumExamplePy>py -3 --version
Python 3.10.0b4
и я убедился, что мой pyinstaller обновлен:
C:\Users\myname\Documents\Projects\Project Migration\SeleniumExamplePy>pip install --upgrade pyinstaller
Requirement already satisfied: pyinstaller in c:\users\myname\appdata\local\programs\python\python310\lib\site-packages (4.4)
Requirement already satisfied: pefile>=2017.8.1 in c:\users\myname\appdata\local\programs\python\python310\lib\site-packages (from pyinstaller) (2021.5.24)
Requirement already satisfied: pyinstaller-hooks-contrib>=2020.6 in c:\users\myname\appdata\local\programs\python\python310\lib\site-packages (from pyinstaller) (2021.2)
Requirement already satisfied: pywin32-ctypes>=0.2.0 in c:\users\myname\appdata\local\programs\python\python310\lib\site-packages (from pyinstaller) (0.2.0)
Requirement already satisfied: setuptools in c:\users\myname\appdata\local\programs\python\python310\lib\site-packages (from pyinstaller) (56.0.0)
Requirement already satisfied: altgraph in c:\users\myname\appdata\local\programs\python\python310\lib\site-packages (from pyinstaller) (0.17)
Requirement already satisfied: future in c:\users\myname\appdata\local\programs\python\python310\lib\site-packages (from pefile>=2017.8.1->pyinstaller) (0.18.2)
Я получаю ImportError: No module named _bootlocale error при попытке преобразовать мой код Python, который я тщательно протестировал, в исполняемый файл:
**C:\Users\myname\Documents\Projects\Project Migration\SeleniumExamplePy>pyinstaller --onefile --clean ExtractRules.spec**
83 INFO: PyInstaller: 4.4
83 INFO: Python: 3.10.0b4
100 INFO: Platform: Windows-10-10.0.18363-SP0
110 INFO: UPX is not available.
110 INFO: Removing temporary files and cleaning cache in C:\Users\myname\AppData\Local\pyinstaller
113 INFO: Extending PYTHONPATH with paths
['C:\\Users\\myname\\Documents\\Projects\\Project '
'Migration\\SeleniumExamplePy',
'C:\\Users\\myname\\Documents\\Projects\\Project '
'Migration\\SeleniumExamplePy']
126 INFO: checking Analysis
126 INFO: Building Analysis because Analysis-00.toc is non existent
126 INFO: Initializing module dependency graph...
126 INFO: Caching module graph hooks...
139 INFO: Analyzing base_library.zip ...
3449 INFO: Processing pre-find module path hook distutils from 'c:\\users\\myname\\appdata\\local\\programs\\python\\python310\\lib\\site-packages\\PyInstaller\\hooks\\pre_find_module_path\\hook-distutils.py'.
3449 INFO: distutils: retargeting to non-venv dir 'c:\\users\\myname\\appdata\\local\\programs\\python\\python310\\lib'
Traceback (most recent call last):
File "c:\users\myname\appdata\local\programs\python\python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "c:\users\myname\appdata\local\programs\python\python310\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\Users\myname\AppData\Local\Programs\Python\Python310\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\__main__.py", line 126, in run
run_build(pyi_config, spec_file, **vars(args))
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\__main__.py", line 65, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\building\build_main.py", line 758, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\building\build_main.py", line 705, in build
exec(code, spec_namespace)
File "ExtractRules.spec", line 7, in <module>
a = Analysis(['ExtractRules.py'],
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\building\build_main.py", line 254, in __init__
self.__postinit__()
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\building\datastruct.py", line 159, in __postinit__
self.assemble()
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\building\build_main.py", line 354, in assemble
self.graph = initialize_modgraph(
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\depend\analysis.py", line 882, in initialize_modgraph
graph = PyiModuleGraph(
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\depend\analysis.py", line 122, in __init__
self._analyze_base_modules()
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\depend\analysis.py", line 289, in _analyze_base_modules
self._base_modules = [mod
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\depend\analysis.py", line 291, in <listcomp>
for mod in self.import_hook(req)]
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1505, in import_hook
target_package, target_module_partname = self._find_head_package(
File "c:\users\myname\appdata\local\programs\python\python310\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1711, in _find_head_package
raise ImportError("No module named " + target_package_name)
ImportError: No module named _bootlocale
Я посмотрел на этот комментарий https://bugzilla.redhat.com/show_bug.cgi?id=1899950, на который Azky_Mbk разместил ссылку в ответ на очень похожий вопрос PyInstaller - ImportError: Нет модуля с именем _bootlocale, и есть заявление Виктора Стиннера 2021-01-19 10:25:32 UTC
«О, _bootlocale был частным модулем, который не следует импортировать напрямую. Я удалил его и заменил новой функцией _locale._get_locale_encoding () в Python 3.10»
Итак, если модуль был удален, почему последняя версия pyinstaller все еще пытается его вытащить? Это потому, что я использую Python 3.10b4, а pyinstaller еще не обновлен для него? Есть ли способ исключить модуль _bootlocale из исполняемой сборки, чтобы иметь возможность создавать исполняемый файл?
Я тщательно протестировал свою программу, и она работает без проблем при запуске из .py. Я не называю ничего, что напрямую относится к модулю bootlocale, не уверен на 100%, что он делает или делал до того, как был удален из 3.10.
Спасибо!
9 ответов
Это проблема совместимости с python 3.10, о которой упоминается:https://github.com/pyinstaller/pyinstaller/issues/5693
И добавление --exclude-module _bootlocale в командную строку решило мою проблему.
Если бы возникла та же проблема, все, что вам нужно, это установить pyinstaller, а затем установить поддержку 3.10.
Использовать:
pip install pyinstaller
pip install https://github.com/rokm/pyinstaller/archive/refs/heads/python-3.10.zip
Попробуйте установить последнюю версию Pyinstaller.
Это решает проблему:
pip install pyinstaller==4.10
Похоже, это несоответствие версий между pyinstaller и python. Недавно я обновился до python3.10, установил из requirements.txt, а затем столкнулся с этой проблемой. Я запускал pyinstaller 4.5.1, но последней версией является pyinstaller 5.1. Вы можете получить последнюю версию pyinstaller, выполнив следующие действия:
pip install --upgrade pyinstaller
или же
python -m pip install --upgrade pyinstaller
используйте эту команду, чтобы сначала установить pyinstaller.
pip install pyinstaller==4.10
или установите последнюю версию pyinstaller вместо 4.10 . после установки попробуй сделать exe. я надеюсь, что это работает
Это проблема совместимости с Python 3.10, которая обсуждается здесь: https://github.com/pyinstaller/pyinstaller/issues/5693
И добавляя
--exclude-module _bootlocale
в командную строку решил мою проблему.
Я исправил это в своем поэтическом проекте, отредактировав pyproject.toml:
[tool.poetry.dependencies]
python = "^3.8"
к
[tool.poetry.dependencies]
python = "^3.8,<3.11"
в моем случае я решил это, удалив пакет fbs
pip3 uninstall fbs
Добавить --exclude-module _bootlocale в командную строку Решено для меня. Большое спасибо @LingYan Meng