2.4 alpha2 failing on windows 10

Thibaut Cuvelier tcuvelier at lyx.org
Fri Feb 12 14:50:54 UTC 2021


On Fri, 12 Feb 2021 at 14:36, Thibaut Cuvelier <tcuvelier at lyx.org> wrote:

> On Fri, 12 Feb 2021 at 06:46, Richard Kimberly Heck <rikiheck at lyx.org>
> wrote:
>
>> On 2/11/21 11:19 PM, Thibaut Cuvelier wrote:
>>
>> On Thu, 11 Feb 2021 at 20:52, Thibaut Cuvelier <tcuvelier at lyx.org> wrote:
>>
>>> On Thu, 11 Feb 2021 at 20:05, José Abílio Matos <jamatos at lyx.org> wrote:
>>>
>>>> On Thursday, February 11, 2021 4:02:19 PM WET Yu Jin wrote:
>>>> > Will be pointless imo, it's not the script's fault that python is not
>>>> found.
>>>> > The fault is to be searched in the part of code which adds the prefix
>>>> path
>>>> > to the environment, which part would that be? After all when
>>>> installing,
>>>> > the installer adds the prefix path to its environment too on runtime
>>>> while
>>>> > installing and then calls the script, it is successful then.
>>>>
>>>> Does Tools->Reconfigure works after adding the python path in the
>>>> environment
>>>> variable?
>>>>
>>>> I expect it to work. If it works that means that the configure.py
>>>> changes are
>>>> not the culprit.
>>>>
>>>
>>> In my case, LyX can reconfigure once its PATH includes Python.
>>>
>>
>> I just checked that the situation is quite weird: in Tools > Preferences
>> > Paths, I have "C:\Program Files\MiKTeX
>> 2.9\miktex\bin\x64;$LyXDir\bin;$LyXDir\Python;$LyXDir\Python\Lib;$LyXDir\imagemagick;$LyXDir\ghostscript\bin",
>> meaning that LyX should really consider its built-in version of Python, but
>> (re)configure always fails if Python is not in the environment variable
>> PATH does not contain Python before LyX starts.
>>
>> Does it fail if you try to reconfigure once LyX has launched? If so, can
>> you please open View> Messages, then activate "Files Used By LyX", and
>> reconfigure? I see, at the top
>>
>> 00:43:30.779: python3 -tt "/usr/local/share/lyx/configure.py"
>> --binary-dir="/usr/local/bin/"
>>
>> That is the command LyX is using to try to reconfigure.
>>
>> Maybe we need also to check what the environment is at that point?
>>
>
>  Here is what I get (a full LyX session with two calls to reconfigure):
>
> 14:30:52.923: Running configure...
>>
>> 14:30:56.919: python -tt "C:/Program Files/LyX
>> 2.4/Resources/configure.py" --binary-dir="C:/Program Files/LyX 2.4/bin/"
>>
>> 14:30:57.187: Python was not found; run without arguments to install from
>> the Microsoft Store, or disable this shortcut from Settings > Manage App
>> Execution Aliases.
>>
>> 14:30:57.187: Reloading configuration...Manually looking for python in
>> PATH ...
>>
>> Examining "C:/Program Files/MiKTeX 2.9/miktex/bin/x64/pythontex.exe"
>>
>> Examining
>> "C:/Users/Thibaut/AppData/Local/Microsoft/WindowsApps/python.exe"
>>
>> Examining
>> "C:/Users/Thibaut/AppData/Local/Microsoft/WindowsApps/python3.exe"
>>
>> Examining
>> "C:/Users/Thibaut/AppData/Local/Microsoft/WindowsApps/python.exe"
>>
>> Examining
>> "C:/Users/Thibaut/AppData/Local/Microsoft/WindowsApps/python3.exe"
>>
>> Warning: No python v2.x or 3.x binary found.
>>
>> LyX: reconfiguring user directory
>>
>> support\Systemcall.cpp (291): Systemcall: 'python -tt "C:/Program
>> Files/LyX 2.4/Resources/configure.py" --binary-dir="C:/Program Files/LyX
>> 2.4/bin/"' finished with exit code 9009
>>
>> LyX: Done!
>>
>> 14:31:06.641: (reconfigure)
>>
>> 14:31:21.627: Running configure...
>>
>> 14:31:21.766: python -tt "C:/Program Files/LyX
>> 2.4/Resources/configure.py" --binary-dir="C:/Program Files/LyX 2.4/bin/"
>>
>> 14:31:22.099: Python was not found; run without arguments to install from
>> the Microsoft Store, or disable this shortcut from Settings > Manage App
>> Execution Aliases.
>>
>> 14:31:22.103: Reloading configuration...LyX: reconfiguring user directory
>>
>> support\Systemcall.cpp (291): Systemcall: 'python -tt "C:/Program
>> Files/LyX 2.4/Resources/configure.py" --binary-dir="C:/Program Files/LyX
>> 2.4/bin/"' finished with exit code 9009
>>
>> LyX: Done!
>>
>> 14:31:23.273: (reconfigure)
>>
>> 14:32:30.743: (dialog-toggle progress)
>>
>
> It really seems like LyX is getting the "standard" python.exe that just
> shows a message and returns an error instead of its own Python (or any
> other one from the path).
>

I can still reproduce the problem with master: the major difference is that
I can use a debugger on that build. Digging in the call stack, it looks
like the PATH environment variable is filled with strange things: the
letter e is being replaced by $ for the part that LyX prepends! In
environment.cpp, getEnv("PATH") returns the following string (truncated),
when called from Tools > Reconfigure (find_python_binary in os.cpp):

"C:\\Program Fil$s\\MiKT$X
> 2.9\\mikt$x\\bin\\x64;D:\\Thibaut\\LyX\\cmak$-build-d$bug-visual-studio\\bin;D:\\Thibaut\\LyX\\cmak$-build-d$bug-visual-studio\\Python;D:\\Thibaut\\LyX\\cmak$-build-d$bug-visual-studio\\Python\\Lib;D:\\Thibaut\\LyX\\cmak$-build-d$bug-visual-studio\\imag$magick;D:\\Thibaut\\LyX\\cmak$-build-d$bug-visual-studio\\ghostscript\\bin;C:\\Program
> Files\\Common
> Files\\Oracle\\Java\\javapath;C:\\gurobi911\\win64\\bin;C:\\Program
> Files\\IBM\\ILOG\\CPLEX_Studio201\\opl\\bin\\x64_win64 […]
>

Only the folders that LyX prepends have Es replaced. In a normal shell or
other programs run in my debugger, there is no such thing.

Digging more into it, the first call to getEnv("PATH") returns a perfectly
normal value, when called from prependEnvPath in environment.cpp. It's the
loop in prependEnvPath that does garbage. In my LyX folder in my user
folder, the preferences file has the right line for the path prefix:

\path_prefix "C:/Program Files/MiKTeX
> 2.9/miktex/bin/x64;$LyXDir/bin;$LyXDir/Python;$LyXDir/Python/Lib;$LyXDir/imagemagick;$LyXDir/ghostscript/bin"
>

I therefore suspect that replaceEnvironmentPath in filetools.cpp is the
source of the problem.

   - I believe this function is wrong on Windows, as environment variables
   are supposed to be wrapped in %, like %PATH% (and, by the way,
   environment-variable names are case-insensitive on Windows). (! is only
   used in Batch files, this symbol should not be interpreted here.) Only the
   paths that are understood by LyX are transformed (like LyXDir), not all
   environment variables. Some software adds itself to the path using
   environment variables, i.e. add something like "%CUDA_PATH%" in the PATH
   environment variable that just refers to the CUDA_PATH environment variable
   (set to some perfectly valid path).
   - The line subst(result, '\e', '$') is the most likely culprit for this
   error. Maybe some difference in implementation for regexes?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lyx.org/pipermail/lyx-devel/attachments/20210212/88abb4eb/attachment-0001.html>


More information about the lyx-devel mailing list