I doubt many people are doing this, but if you want an all Linux dev environment for Windows apps that you have made in Python, then you're probably using Wine, Python and maybe pyinstaller.
The below error happened with pyinstaller and it has a lot to do with how Wine identifies paths/drives vs where you execute python.exe from
Never execute python commands from /root because that maps to Wine's default Z:, so any operations performed in /root such as would happen in a Docker container, make Python use Z: which of course breaks things since modules you install and other things need to go into the C: where Python is installed to.
So for example you could cd into /root/.wine/python/dir and run wine python.exe -m pip install something and that is OK but you cannot do it while being in /root/ itself
Another way to avoid this problme is to execute python.exe with the full path from anywhere but /root
Here is an example of bad stuff happening if you do that (keep in mind that in this examle TK and TCL are fully installed by the Python installer already):
10210 INFO: TclTkInfo: initializing cached Tcl/Tk info... 10608 WARNING: tkinter installation is broken. It will be excluded from the application
Digging deeper look at the beginning phase of pyinstaller in this broken example:
711 INFO: PyInstaller: 6.15.0, contrib hooks: 2025.8
712 INFO: Python: 3.8.9
713 INFO: Platform: Windows-7-6.1.7601-SP1
713 INFO: Python environment: Z:\root\.wine\drive_c\users\root\Local Settings\Application Data\Programs\Python\Python38-32
717 INFO: wrote Z:\root\tkinter-final-updatePILAntialiasVersion.spec
731 INFO: Removing temporary files and cleaning cache in C:\users\root\Local Settings\Application Data\pyinstaller
736 INFO: Module search paths (PYTHONPATH):
['Z:\\root\\.wine\\drive_c\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\Scripts\\pyinstaller.exe',
'Z:\\root\\.wine\\drive_c\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\python38.zip',
'Z:\\root\\.wine\\drive_c\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\DLLs',
'Z:\\root\\.wine\\drive_c\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\lib',
'Z:\\root\\.wine\\drive_c\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32',
'Z:\\root\\.wine\\drive_c\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\lib\\site-packages',
'Z:\\root']
Compare the above with a working good example from below:
793 INFO: Python: 3.8.9
794 INFO: Platform: Windows-7-6.1.7601-SP1
794 INFO: Python environment: C:\users\root\Local Settings\Application Data\Programs\Python\Python38-32
796 INFO: wrote Z:\root\tkinter-final-updatePILAntialiasVersion.spec
811 INFO: Removing temporary files and cleaning cache in C:\users\root\Local Settings\Application Data\pyinstaller
826 INFO: Module search paths (PYTHONPATH):
['Z:\\root\\.wine\\drive_c\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\Scripts\\pyinstaller.exe',
'C:\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\python38.zip',
'C:\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\DLLs',
'C:\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\lib',
'C:\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32',
'C:\\users\\root\\Local Settings\\Application '
'Data\\Programs\\Python\\Python38-32\\lib\\site-packages',
'Z:\\root']
We can notice the drive Z: for everything, even though I never installed Python itself there (it was installed to C:)
So what created the difference that broke everything?
I didn't recall that in my original dev environment I did this when installing the pip modules
cd ~/".wine/drive_c/users/root/Local Settings/Application Data/Programs/Python/Python38-32"
wine python.exe -m pip install pyinstaller reportlab pdf2image pillow
I got more/fancy efficient after scripting everything and knowing where everything was and did this:
This way below breaks everything and causes pyinstaller especially do think everything you need should come from Z: which it then uses to look for all dependencies of Python only in Z: which breaks since they are really in C:
wine ~/".wine/drive_c/users/root/Local Settings/Application Data/Programs/Python/Python38-32/python.exe" -m pip install pyinstaller reportlab pdf2image pillow
WARNING: The scripts pip.exe, pip3.8.exe and pip3.exe are installed in 'Z:\root\.wine\drive_c\Python38\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The scripts pyi-archive_viewer.exe, pyi-bindepend.exe, pyi-grab_version.exe, pyi-makespec.exe, pyi-set_version.exe and pyinstaller.exe are installed in 'Z:\root\.wine\drive_c\Python38\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script normalizer.exe is installed in 'Z:\root\.wine\drive_c\Python38\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed altgraph-0.17.4 charset-normalizer-3.4.3 importlib-metadata-8.5.0 packaging-25.0 pdf2image-1.17.0 pefile-2023.2.7 pillow-10.4.0 pip-25.0.1 pyinstaller-6.15.0 pyinstaller-hooks-contrib-2025.8 pywin32-ctypes-0.2.3 reportlab-4.4.3 zipp-3.20.2
pyinstaller, info, tcltkinfo, initializing, cached, tcl, tk, tkinter, installation, excluded, python, linux, dev, apps, identifies, paths, vs, execute, exe, commands, maps, default, z, operations, performed, docker, container, modules, install, installed, dir, pip, ok, problme, examle, installer, contrib, hooks, platform, sp, drive_c, users, settings, programs, updatepilantialiasversion, spec, removing, cache, module, pythonpath, scripts, zip, dlls, lib, packages, didn, installing, quot, reportlab, pdf, efficient, scripting, dependencies, adding, directory, suppress, pyi, archive_viewer, bindepend, grab_version, makespec, set_version, normalizer, successfully, altgraph, charset, importlib, metadata, packaging, pefile, pywin, ctypes, zipp,