Skip to content

Executable python application may fail depending on temp folder #2129

@AdrianEggenberger

Description

@AdrianEggenberger

Hi

I've analyzed a strange issue with python based windows executable built with pyinstaller. The executable could be built without an issue, but when the tool was started the following error occurs:

File "site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgres.py", line 13, in <module> File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "c:\hostedtoolcache\windows\python\3.7.6\x64\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 489, in exec_module File "site-packages\pkg_resources\__init__.py", line 3251, in <module> File "site-packages\pkg_resources\__init__.py", line 3235, in _call_aside File "site-packages\pkg_resources\__init__.py", line 3264, in _initialize_master_working_set File "site-packages\pkg_resources\__init__.py", line 574, in _build_master File "site-packages\pkg_resources\__init__.py", line 567, in __init__ File "site-packages\pkg_resources\__init__.py", line 623, in add_entry File "site-packages\pkg_resources\__init__.py", line 1983, in find_eggs_in_zip File "site-packages\pkg_resources\__init__.py", line 1414, in has_metadata File "site-packages\pkg_resources\__init__.py", line 1853, in _has File "site-packages\pkg_resources\__init__.py", line 1716, in _zipinfo_name AssertionError: C:\Users\A9447~1.EGG\EGG-INFO\PKG-INFO is not a subpath of C:\Users\A9447~1.EGG\AppData\Local\Temp\_MEI120962\base_library.zip\ [10872] Failed to execute script pyi_rth_pkgres 

After a while I've found out that the same executable works properly on other workstations or even with other user accounts.
I guess I've found the root cause for my problem in the file "pkg_ressources.py" of the setuptools. In the function "_setup_prefix" is a test if a path ends with ".egg", what is the case in my situation for my temporairy folder (=> "C:\Users\A9447~1.EGG"). This causes that a new invalid path was built and afterwards caused the assertion. "C:\Users\A9447~1.EGG" is the default temp folder for my user "a.eggenberger".

The quick solution was to set another user temp folder "C\:Temp". This solved the behavior and it works as expected.

To avoid that other users with a lastname starting with "egg" the code in the _setup_prefix function should be improved.

Regards Adrian

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions