0

I am facing a problem when converting my app to .exe- file as the title says. The issue seems to be with keystoneauth1 library.

I created a minimal test "hello.py" for troubleshooting and isolated the issue to be when importing keystoneauth1.identity.v3. I can run the script below in console normally with expected output but the built .exe- file fails.

from keystoneauth1.identity import v3
print("Hello World!")

Following errors occur when running the created .exe- files:

pyinstaller

File "hello.py", line 1, in \<module\>
File "\<frozen importlib.\_bootstrap\>", line 1027, in \_find_and_load
File "\<frozen importlib.\_bootstrap\>", line 1006, in \_find_and_load_unlocked
File "\<frozen importlib.\_bootstrap\>", line 688, in _load_unlocked
File "PyInstaller\\loader\\pyimod02_importers.py", line 385, in exec_module
File "keystoneauth1\\identity_init_.py", line 13, in \<module\>
File "\<frozen importlib.\_bootstrap\>", line 1027, in \_find_and_load
File "\<frozen importlib.\_bootstrap\>", line 1006, in \_find_and_load_unlocked
File "\<frozen importlib.\_bootstrap\>", line 688, in \_load_unlocked
File "PyInstaller\\loader\\pyimod02_importers.py", line 385, in exec_module
File "keystoneauth1\\identity\\base.py", line 21, in \<module\>
File "\<frozen importlib.\_bootstrap\>", line 1027, in \_find_and_load
File "\<frozen importlib.\_bootstrap\>", line 1006, in \_find_and_load_unlocked
File "\<frozen importlib.\_bootstrap\>", line 688, in _load_unlocked
File "PyInstaller\\loader\\pyimod02_importers.py", line 385, in exec_module
File "keystoneauth1\\access_init_.py", line 13, in \<module\>
File "\<frozen importlib.\_bootstrap\>", line 1027, in \_find_and_load
File "\<frozen importlib.\_bootstrap\>", line 1006, in \_find_and_load_unlocked
File "\<frozen importlib.\_bootstrap\>", line 688, in \_load_unlocked
File "PyInstaller\\loader\\pyimod02_importers.py", line 385, in exec_module
File "keystoneauth1\\access\\access.py", line 20, in \<module\>
File "\<frozen importlib.\_bootstrap\>", line 1027, in \_find_and_load
File "\<frozen importlib.\_bootstrap\>", line 1006, in \_find_and_load_unlocked
File "\<frozen importlib.\_bootstrap\>", line 688, in \_load_unlocked
File "PyInstaller\\loader\\pyimod02_importers.py", line 385, in exec_module
File "keystoneauth1\\access\\service_catalog.py", line 22, in \<module\>
File "\<frozen importlib.\_bootstrap\>", line 1027, in \_find_and_load
File "\<frozen importlib.\_bootstrap\>", line 1006, in \_find_and_load_unlocked
File "\<frozen importlib.\_bootstrap\>", line 688, in \_load_unlocked
File "PyInstaller\\loader\\pyimod02_importers.py", line 385, in exec_module
File "keystoneauth1\\discover.py", line 28, in \<module\>
File "\<frozen importlib.\_bootstrap\>", line 1027, in \_find_and_load
File "\<frozen importlib.\_bootstrap\>", line 1006, in \_find_and_load_unlocked
File "\<frozen importlib.\_bootstrap\>", line 688, in _load_unlocked
File "PyInstaller\\loader\\pyimod02_importers.py", line 385, in exec_module
File "os_service_types_init_.py", line 18, in \<module\>
File "\<frozen importlib.\_bootstrap\>", line 1027, in \_find_and_load
File "\<frozen importlib.\_bootstrap\>", line 1006, in \_find_and_load_unlocked
File "\<frozen importlib.\_bootstrap\>", line 688, in _load_unlocked
File "PyInstaller\\loader\\pyimod02_importers.py", line 385, in exec_module
File "os_service_types\\service_types.py", line 23, in \<module\>
File "os_service_types\\data_init_.py", line 30, in read_data
FileNotFoundError: \[Errno 2\] No such file or directory: '\\Local\\Temp\\\_MEI2202\\os_service_types\\data\\service-types.json'
\[13472\] Failed to execute script 'hello' due to unhandled exception!

cx_Freeze

.venv\\Lib\\site-packages\\cx_Freeze\\initscripts\__startup_\_.py", line 124, in run
.venv\\Lib\\site-packages\\cx_Freeze\\initscripts\\console.py", line 16, in run
exec(code, module_main.__dict__)
File "hello.py", line 1, in \<module\>
File ".venv\\lib\\site-packages\\keystoneauth1\\identity\__init_\_.py", line 13, in \<module\>
from keystoneauth1.identity import base
File ".venv\\lib\\site-packages\\keystoneauth1\\identity\\base.py", line 21, in \<module\>
from keystoneauth1 import access
File ".venv\\lib\\site-packages\\keystoneauth1\\access\__init_\_.py", line 13, in \<module\>
from keystoneauth1.access.access import \* # noqa
File ".venv\\lib\\site-packages\\keystoneauth1\\access\\access.py", line 20, in \<module\>
from keystoneauth1.access import service_catalog
ImportError: cannot import name 'service_catalog' from partially initialized module 'keystoneauth1.access' (most likely due to a circular import) (build\\exe.win-amd64-3.10\\lib\\keystoneauth1\\access\__init_\_.pyc)

py2exe

File "hello.py", line 1, in \<module\>
File "keystoneauth1\\identity\__init_\_.pyc", line 13, in \<module\>
File "keystoneauth1\\identity\\base.pyc", line 21, in \<module\>
File "keystoneauth1\\access\__init_\_.pyc", line 13, in \<module\>
File "keystoneauth1\\access\\access.pyc", line 20, in \<module\>
File "keystoneauth1\\access\\service_catalog.pyc", line 22, in \<module\>
File "keystoneauth1\\discover.pyc", line 28, in \<module\>
File "os_service_types\__init_\_.pyc", line 18, in \<module\>
File "os_service_types\\service_types.pyc", line 23, in \<module\>
File "os_service_types\\data\__init_\_.pyc", line 30, in read_data
FileNotFoundError: \[Errno 2\] No such file or directory: '\\dist\\library.zip\\os_service_types\\data\\service-types.json'

I have tested with python versions 3.9.13 and 3.10.11. I am using virtual environment.

asked Sep 19, 2023 at 15:20

1 Answer 1

0

Not sure if this is the proper way, however, I was facing exactly the same problem and this spec file for pyinstaller did the trick for me

# -*- mode: python ; coding: utf-8 -*-
from PyInstaller.utils.hooks import collect_submodules
from PyInstaller.utils.hooks import copy_metadata
import sys
from os import path
site_packages = next(p for p in sys.path if 'site-packages' in p)
hiddenimports = ['keystoneauth1', 'os_service_types', 'jsonschema_specifications']
hiddenimports += collect_submodules('os_service_types')
hiddenimports += collect_submodules('jsonschema_specifications')
added_files = [
 (path.join(site_packages,'os_service_types'), 'os_service_types'),
 (path.join(site_packages,'jsonschema_specifications'), 'jsonschema_specifications')
]
added_files += copy_metadata('os_service_types')
added_files += copy_metadata('keystoneauth1')
added_files += copy_metadata('python-keystoneclient')
added_files += copy_metadata('python-openstackclient')
added_files += copy_metadata('python-neutronclient')
added_files += copy_metadata('python-glanceclient')
added_files += copy_metadata('python-novaclient')
added_files += copy_metadata('python-cinderclient')
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.