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

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions