Issue2343

classification
Title: PYTHONPATH is overwritten on Windows
Type: Severity: normal
Components: Versions: Jython 2.7
Milestone: Jython 2.7.2
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: pekka.klarck, zyasoft
Priority: Keywords:

Created on 2015-04-26.19:28:31 by pekka.klarck, last changed 2015-10-29.22:36:00 by zyasoft.

Messages
msg9971 (view) Author: Pekka Klärck (pekka.klarck) Date: 2015-04-26.19:28:31
To reproduce:

    C:\>set PYTHONPATH=foo
    C:\>jython -c "import os; print os.getenv('PYTHONPATH')"
    c:\JYTHON~1.7RC\bin

Tested with Jython 2.7 RC 3. Wasn't a problem with earlier pre-releases (don't remember exactly what I tested last on Windows). Most likely an issue in new jython.exe launcher. 

Overriding general purpose environment variables like that is definitely not good. This is problem at least for Robot Framework that uses PYTHONPATH to find test libraries regardless the Python interpreter that is used.
msg9974 (view) Author: Jim Baker (zyasoft) Date: 2015-04-26.21:37:01
Related to this issue in PyInstaller, which is how we build jython.exe, so it's been true ever since we started using jython.exe as of RC1:

https://github.com/pyinstaller/pyinstaller/issues/187

We could look at alternative packaging with py2exe and cx_Freeze
msg9975 (view) Author: Pekka Klärck (pekka.klarck) Date: 2015-04-26.22:00:48
Auch. Changing the tool to create jython.exe at this point would not be fun. Could Jython somehow see the original PYTHONPATH via Java APIs or otherwise?
msg9976 (view) Author: Jim Baker (zyasoft) Date: 2015-04-26.23:36:04
Unfortunately PYTHONPATH is no longer available, since it was reset by the launcher due to the issues with PyInstaller. Your best bet may be to simply directly execute the result of calling bin\jython --print. So my Windows VM, this looks like:

C:\jython2.7rc3>bin\jython --print
"C:\Program Files\Java\jdk1.7.0_55\bin\java" -Xmx512m -Xss1024k -classpath C:\jython2.7rc3\jython.jar;. -Dpython.home=C:\jython2.7rc3 -Dpython.executable=C:\jython2.7rc3\bin\jython.exe -Dpython.launcher.uname=windows -Dpython.launcher.tty=true org.python.util.jython

You can even directly execute this on the command line, using an appropriate somewhat familiar to standard shell programming on Unix-like systems (see http://stackoverflow.com/a/108511). First, let's set up the PYTHONPATH:

C:\jython2.7rc3>set PYTHONPATH=foo

Then try out:

C:\jython2.7rc3>for /f "delims=" %i in ('bin\jython --print') do set call_jython=%i
C:\jython2.7rc3>call %call_jython% -c "import os; print os.environ['PYTHONPATH']"
foo

It's possible to put this extra level of indirection in a minimal jython.bat that also calls the args. Here's my first attempt at such a wrapper script, which is likely to have errors, since I have never written a Windows batch script before:

@echo off
for /f "delims=" %%i in ('%~f0\..\jython.exe --print') do call %%i %*

(thanks to http://stackoverflow.com/questions/17063947/get-current-batchfile-directory)

However, you have to explicitly call it jython.bat (or name of your choice), since I don't think you can simply rename jython.exe to get it out of its way, due to how other installed scripts like pip.exe will bind jython.exe. Still it does seem to work:

C:\jython2.7rc3>bin\jython.bat -c "import os; print os.environ['PYTHONPATH']"
foo
msg9981 (view) Author: Pekka Klärck (pekka.klarck) Date: 2015-04-27.10:41:51
Creating jython.bat wrapper is definitely an option, but I don't think that's a solution I want to present to our Windows/Jython users. A workaround in our code to see the original PYTHONPATH value somehow would be much better. Not sure is there any easy way to accomplish that, though.

If there is no easy way to fix or workaround this so that users don't see the change, I think we should change Robot Framework to not do anything special with PYTHONPATH: https://github.com/robotframework/robotframework/issues/1983
msg10409 (view) Author: Jim Baker (zyasoft) Date: 2015-10-29.22:36:00
Hopefully we can fix with different launcher exe wrapper generator, such as by using cxFreeze
History
Date User Action Args
2015-10-29 22:36:00zyasoftsetmessages: + msg10409
milestone: Jython 2.7.2
2015-04-27 10:41:51pekka.klarcksetmessages: + msg9981
2015-04-26 23:36:04zyasoftsetmessages: + msg9976
2015-04-26 22:00:49pekka.klarcksetmessages: + msg9975
2015-04-26 21:37:01zyasoftsetnosy: + zyasoft
messages: + msg9974
2015-04-26 19:28:31pekka.klarckcreate