msg147609 - (view) |
Author: Éric Araujo (eric.araujo) * |
Date: 2011-11-14 16:50 |
I wanted to know if sys.executable was always an absolute path but the doc does not talk about that.
(My use case is that I’d like to reload a process and I wonder if I can call os.execve or if I need to use os.execvpe.)
|
msg148006 - (view) |
Author: Petri Lehtinen (petri.lehtinen) * |
Date: 2011-11-20 20:09 |
Attached a patch.
|
msg148029 - (view) |
Author: Eli Bendersky (eli.bendersky) * |
Date: 2011-11-21 04:28 |
LGTM
|
msg148042 - (view) |
Author: Éric Araujo (eric.araujo) * |
Date: 2011-11-21 13:50 |
Patch looks good, but are you 100% sure that sys.executable is always absolute? (On all OSes, under multiprocessing, etc?)
|
msg148043 - (view) |
Author: Petri Lehtinen (petri.lehtinen) * |
Date: 2011-11-21 14:20 |
Éric Araujo wrote:
> Patch looks good, but are you 100% sure that sys.executable is
> always absolute? (On all OSes, under multiprocessing, etc?)
Well, its value is computed by a function named
Py_GetProgramFullPath(), so I'm quite sure. I had a quick look on what
the function is doing, but it was quite complicated. I can check it
better if needed.
|
msg148317 - (view) |
Author: Éric Araujo (eric.araujo) * |
Date: 2011-11-25 15:00 |
This is the bug I was thinking about: #7774. Adding some people from that discussion to nosy.
|
msg148355 - (view) |
Author: Antoine Pitrou (pitrou) * |
Date: 2011-11-25 19:51 |
LGTM too.
You could also add a test to test_sys ensuring that sys.executable is always executable.
|
msg148356 - (view) |
Author: STINNER Victor (vstinner) * |
Date: 2011-11-25 20:04 |
> You could also add a test to test_sys ensuring that sys.executable
> is always executable.
And that sys.executable is absolute?
sys.executable is an empty string if sys.argv[0] has been changed and Python is unable to retrieve the real path to the Python executable. See the issue #7774. The fact that sys.executable can be empty should be documented.
|
msg148357 - (view) |
Author: Antoine Pitrou (pitrou) * |
Date: 2011-11-25 20:11 |
> > You could also add a test to test_sys ensuring that sys.executable
> > is always executable.
>
> And that sys.executable is absolute?
Er, yes, that's what I meant. Sorry.
|
msg149468 - (view) |
Author: Petri Lehtinen (petri.lehtinen) * |
Date: 2011-12-14 19:28 |
Attaching an updated patch. The documentation now says that sys.executable may be an empty string. The patch also adds a test to make sure that sys.executable is absolute.
|
msg149483 - (view) |
Author: Philip Jenvey (pjenvey) * |
Date: 2011-12-14 23:11 |
sys.executable can be None on Jython (and I believe IronPython) when ran in an 'embedded' mode
|
msg149511 - (view) |
Author: Petri Lehtinen (petri.lehtinen) * |
Date: 2011-12-15 07:09 |
> sys.executable can be None on Jython (and I believe IronPython) when ran in an 'embedded' mode
In CPython, embedding doesn't change the behavior.
|
msg150460 - (view) |
Author: Éric Araujo (eric.araujo) * |
Date: 2012-01-02 15:58 |
This discussion seems relevant: http://mail.python.org/pipermail/python-dev/2006-March/062453.html (it talks about the meaning of sys.executable, special cases such as embedded Python and functions that implement it (so we can have a look at that code)).
|
msg152403 - (view) |
Author: Petri Lehtinen (petri.lehtinen) * |
Date: 2012-01-31 19:10 |
Attached one more patch. The documentation now also mentions None as a possible value.
|
msg152473 - (view) |
Author: Roundup Robot (python-dev) |
Date: 2012-02-02 19:30 |
New changeset fdcda5b74317 by Petri Lehtinen in branch '3.2':
Document absoluteness of sys.executable
http://hg.python.org/cpython/rev/fdcda5b74317
New changeset 8b591a86fc91 by Petri Lehtinen in branch 'default':
Merge branch 3.2
http://hg.python.org/cpython/rev/8b591a86fc91
New changeset c351536e804a by Petri Lehtinen in branch '2.7':
Document absoluteness of sys.executable
http://hg.python.org/cpython/rev/c351536e804a
|
msg270210 - (view) |
Author: Brad Larsen (blarsen) * |
Date: 2016-07-11 22:06 |
It looks like sys.executable is *not* always an absolute path. In Python 2.7:
$ which python2.7
/opt/local/bin/python2.7
$ cd /opt/local/bin
$ ../bin/python2.7 -m 'import sys; print(sys.executable)'
/opt/local/bin/../bin/python2.7
Also in Python 3.5:
$ which python3.5
/opt/local/bin/python3.5
$ cd /opt/local/bin
$ ../bin/python3.5 -m 'import sys; print(sys.executable)'
/opt/local/bin/../bin/python3.5
|
msg270217 - (view) |
Author: Eryk Sun (eryksun) * |
Date: 2016-07-12 00:35 |
"/opt/local/bin/../bin/python2.7" is an absolute path.
>>> os.path.isabs('/opt/local/bin/../bin/python2.7')
True
It's not relative to the working directory.
|
msg270222 - (view) |
Author: Ned Deily (ned.deily) * |
Date: 2016-07-12 02:39 |
@blarsen, and there's something strange about your example. '-m' won't work with a real python executable, presumably you meant '-c'. And judging from the paths involved, I'm guessing you are using MacPorts on OS X. With either MacPorts or any other OS X framework build, you wouldn't see results like that with -c.
../bin/python3.5 -c 'import sys; print(sys.executable)'
/opt/local/bin/python3.5
../bin/python2.7 -c 'import sys; print(sys.executable)'
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
So I'm guessing what's in ../bin/python3.7 and ../bin/python3.5 is something other than the normal python bootstrap binaries.
|
msg270223 - (view) |
Author: Brad Larsen (blarsen) * |
Date: 2016-07-12 02:59 |
@eryksun, you are right! The output *is* an absolute path as far as `os.path.isabs` is concerned.
@ned.deily, you are right about my example --- I transcribed it wrong, and it should be `-c`.
The system in question is not a Mac OS system, but a Linux system with newer Python versions than what come with the system installed to /opt/local. These are compiled from source, but without any modifications.
I'm commenting here because I'm seeing the `test_sys` test from the regression suite fail in a slightly modified version of Python that ships with a product. In particular, in Lib/test/test_sys.py around line 640, we have this:
@unittest.skipIf(sys.base_prefix != sys.prefix,
'Test is not venv-compatible')
def test_executable(self):
# sys.executable should be absolute
self.assertEqual(os.path.abspath(sys.executable), sys.executable)
Yes, /opt/local/bin/../bin/python3.5 is an absolute path as far as `os.path.isabs` is concerned, but `os.path.abspath('/opt/local/bin/../bin/python3.5')` gives '/opt/local/bin/python3.5', and the test fails. So maybe the documentation is fine but the test is wrong?
|
msg270224 - (view) |
Author: Ned Deily (ned.deily) * |
Date: 2016-07-12 03:05 |
@blarsen, OK, but if you want to pursue this, please open a new issue against the current versions. This issue was closed years ago and against earlier versions so your comments will not get acted on.
|
|
Date |
User |
Action |
Args |
2022-04-11 14:57:23 | admin | set | github: 57611 |
2016-07-12 03:05:43 | ned.deily | set | messages:
+ msg270224 |
2016-07-12 02:59:08 | blarsen | set | messages:
+ msg270223 |
2016-07-12 02:39:28 | ned.deily | set | nosy:
+ ned.deily messages:
+ msg270222
|
2016-07-12 00:35:28 | eryksun | set | nosy:
+ eryksun messages:
+ msg270217
|
2016-07-11 22:06:12 | blarsen | set | nosy:
+ blarsen messages:
+ msg270210
|
2012-02-02 19:30:22 | python-dev | set | status: open -> closed
nosy:
+ python-dev messages:
+ msg152473
resolution: fixed stage: resolved |
2012-01-31 19:10:36 | petri.lehtinen | set | files:
+ issue13402_v3.patch
messages:
+ msg152403 |
2012-01-02 15:58:34 | eric.araujo | set | messages:
+ msg150460 |
2011-12-15 07:09:33 | petri.lehtinen | set | messages:
+ msg149511 |
2011-12-14 23:11:28 | pjenvey | set | nosy:
+ pjenvey, dino.viehland messages:
+ msg149483
|
2011-12-14 19:28:54 | petri.lehtinen | set | files:
+ issue13402_v2.patch
messages:
+ msg149468 |
2011-11-25 20:11:41 | pitrou | set | messages:
+ msg148357 |
2011-11-25 20:04:24 | vstinner | set | messages:
+ msg148356 |
2011-11-25 19:51:31 | pitrou | set | messages:
+ msg148355 |
2011-11-25 15:00:07 | eric.araujo | set | nosy:
+ ronaldoussoren, pitrou, vstinner, schmir, flox messages:
+ msg148317
|
2011-11-21 20:08:03 | eric.snow | set | nosy:
+ eric.snow
|
2011-11-21 14:20:04 | petri.lehtinen | set | messages:
+ msg148043 |
2011-11-21 13:50:02 | eric.araujo | set | messages:
+ msg148042 |
2011-11-21 04:28:26 | eli.bendersky | set | nosy:
+ eli.bendersky messages:
+ msg148029
|
2011-11-20 20:09:07 | petri.lehtinen | set | files:
+ issue13402.patch keywords:
+ patch messages:
+ msg148006
|
2011-11-19 10:50:21 | petri.lehtinen | set | nosy:
+ petri.lehtinen
|
2011-11-14 16:50:37 | eric.araujo | create | |