Hi all,
I am working with CPython on top of Wine 4.14. I know for certain that some path manipulation logic in Wine is broken but I am having trouble tracking down the root cause.
I am launching Python like this:
user@comp:/path/other> WINEDEBUG=-all PYTHONHOME="z:\path\.to\target" wine /path/.to/target/python.exe
Notice that the environment variable PYTHONHOME contains a folder with a leading dot (`.to`). Python should pick it up and expose it as the path to its executable - like this:
user@comp:/path/other> WINEDEBUG=-all PYTHONHOME="z:\path\.to\target" wine /path/.to/target/python.exe -c "import sys; print(sys.executable)" Z:\pathto\target\python.exe
Notice that `.` is missing from the path that is being printed.
It gets even weirder if the folder name starts with two leading dots, i.e. `..to` - like this:
user@comp:/path/other> WINEDEBUG=-all PYTHONHOME="z:\path\..to\target" wine /path/..to/target/python.exe -c "import sys; print(sys.executable)" Z:\to\target\python.exe
Now an even longer segment is missing: `path..`
I confirmed that the above steps work correctly on Windows 10, so it is very likely a bug in Wine. I collected all necessary steps required for reproducing this bug below this email.
The startup code of CPython is somewhat convoluted, which is why I am having trouble identifying the Wine/Windows API in question. Any help is greatly appreciated.
Best regards, Sebastian
---
user@comp:/path/.to/target> wget https://www.python.org/ftp/python/3.7.4/python-3.7.4-embed-win32.zip 2> /dev/null user@comp:/path/.to/target> unzip python-3.7.4-embed-win32.zip > /dev/null; rm python-3.7.4-embed-win32.zip user@comp:/path/.to/target> rm python37._pth user@comp:/path/.to/target> mkdir Lib; mv python37.zip Lib/; cd Lib; unzip python37.zip > /dev/null; rm python37.zip; cd .. user@comp:/path/.to/target> cd /path/other/ user@comp:/path/other> WINEDEBUG=-all PYTHONHOME="z:\path\.to\target" wine /path/.to/target/python.exe Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. Traceback (most recent call last): File "/etc/pythonstart", line 7, in <module> import readline ModuleNotFoundError: No module named 'readline'
exit()
user@comp:/path/other> WINEDEBUG=-all PYTHONHOME="z:\path\.to\target" wine /path/.to/target/python.exe -c "import sys; print(sys.executable)" Z:\pathto\target\python.exe