I have a file file.py that builds a tkinter GUI with the following dependencies:
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from tkinter import filedialog
import nashpy as nash
import axelrod as axl
import numpy as np
import warnings
I'm trying to convert it to an exe file using pyinstaller, but it isn't working for two reasons, which I've narrowed down to the lines import nashpy as nash and import axelrod as axl.
When I try to convert file.py or the following testnash.py
# testnash.py
import nashpy as nash
inp = input("Press Enter")
using pyinstaller, it spits out some of the normal output I usually see with pyinstaller, but then towards the end, I get the following (truncated) error:
(...)
target_modules = self._safe_import_hook(*import_info, **kwargs)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 437, in _safe_import_hook
return super()._safe_import_hook(target_module_partname, source_module, target_attr_names, level, edge_attr)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2048, in _safe_import_hook
target_modules = self.import_hook(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1245, in import_hook
submodule = self._safe_import_module(head, mname, submodule)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 484, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1792, in _safe_import_module
self._process_imports(n)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2591, in _process_imports
target_modules = self._safe_import_hook(*import_info, **kwargs)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 437, in _safe_import_hook
return super()._safe_import_hook(target_module_partname, source_module, target_attr_names, level, edge_attr)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2048, in _safe_import_hook
target_modules = self.import_hook(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1232, in import_hook
target_package, target_module_partname = self._find_head_package(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1411, in _find_head_package
target_package = self._safe_import_module(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 484, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1792, in _safe_import_module
self._process_imports(n)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2591, in _process_imports
target_modules = self._safe_import_hook(*import_info, **kwargs)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 437, in _safe_import_hook
return super()._safe_import_hook(target_module_partname, source_module, target_attr_names, level, edge_attr)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2048, in _safe_import_hook
target_modules = self.import_hook(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1245, in import_hook
submodule = self._safe_import_module(head, mname, submodule)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 484, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1792, in _safe_import_module
self._process_imports(n)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2591, in _process_imports
target_modules = self._safe_import_hook(*import_info, **kwargs)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 437, in _safe_import_hook
return super()._safe_import_hook(target_module_partname, source_module, target_attr_names, level, edge_attr)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2048, in _safe_import_hook
target_modules = self.import_hook(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1232, in import_hook
target_package, target_module_partname = self._find_head_package(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1411, in _find_head_package
target_package = self._safe_import_module(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 484, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1792, in _safe_import_module
self._process_imports(n)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2591, in _process_imports
target_modules = self._safe_import_hook(*import_info, **kwargs)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 437, in _safe_import_hook
return super()._safe_import_hook(target_module_partname, source_module, target_attr_names, level, edge_attr)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2048, in _safe_import_hook
target_modules = self.import_hook(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1245, in import_hook
submodule = self._safe_import_module(head, mname, submodule)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 484, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1792, in _safe_import_module
self._process_imports(n)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2591, in _process_imports
target_modules = self._safe_import_hook(*import_info, **kwargs)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 437, in _safe_import_hook
return super()._safe_import_hook(target_module_partname, source_module, target_attr_names, level, edge_attr)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2048, in _safe_import_hook
target_modules = self.import_hook(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1232, in import_hook
target_package, target_module_partname = self._find_head_package(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1411, in _find_head_package
target_package = self._safe_import_module(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 484, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1792, in _safe_import_module
self._process_imports(n)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2591, in _process_imports
target_modules = self._safe_import_hook(*import_info, **kwargs)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 437, in _safe_import_hook
return super()._safe_import_hook(target_module_partname, source_module, target_attr_names, level, edge_attr)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2048, in _safe_import_hook
target_modules = self.import_hook(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1232, in import_hook
target_package, target_module_partname = self._find_head_package(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1411, in _find_head_package
target_package = self._safe_import_module(
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 484, in _safe_import_module
return super()._safe_import_module(module_basename, module_name, parent_package)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 1792, in _safe_import_module
self._process_imports(n)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py", line 2591, in _process_imports
target_modules = self._safe_import_hook(*import_info, **kwargs)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 368, in _safe_import_hook
excluded_imports = self._find_all_excluded_imports(source_module.identifier)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\analysis.py", line 356, in _find_all_excluded_imports
excluded_imports.update(module_hook.excludedimports)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\imphook.py", line 316, in __getattr__
self._load_hook_module()
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\depend\imphook.py", line 383, in _load_hook_module
self._hook_module = importlib_load_source(self.hook_module_name, self.hook_filename)
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\compat.py", line 577, in importlib_load_source
mod_loader.exec_module(mod)
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\hooks\hook-matplotlib.py", line 34, in <module>
if compat.is_win and hookutils.check_requirement('matplotlib >= 3.7.0'):
File "C:\Users\<user>\anaconda3\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 414, in check_requirement
return parsed_requirement.specifier.contains(version, prereleases=True)
File "C:\Users\<user>\anaconda3\lib\site-packages\packaging\specifiers.py", line 905, in contains
item = Version(item)
File "C:\Users\<user>\anaconda3\lib\site-packages\packaging\version.py", line 196, in __init__
match = self._regex.search(version)
TypeError: expected string or bytes-like object
I'm not sure what to make of this, however. I tried installing auto-py-to-exe and converting it that way, but I got the same output.
When I comment out import nashpy as nash and try to convert file.py with just import axelrod as axl there, pyinstaller seems to work and does create file.exe, but when I try to run it, I get this ModuleNotFoundError
, even though when I run file.py in VSCode it runs with axelrod just fine.
I've seen this page and this page, which was linked on it, about making sure everything is packaged correctly. I tried some of the things listed there, but haven't had any luck. I've tried using --onedir instead of --onefile. I've tried reinstalling pyinstaller. I've tried running it in Command Prompt vs a conda environment.
I'm using pyinstaller 6.4.0 and Python 3.9.18. Do I need to try a different version of pyinstaller? If so, how do I know which one? Is my program doomed to be a py file forever?