This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年11月14日 16:50 by eric.araujo, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| issue13402.patch | petri.lehtinen, 2011年11月20日 20:09 | review | ||
| issue13402_v2.patch | petri.lehtinen, 2011年12月14日 19:28 | review | ||
| issue13402_v3.patch | petri.lehtinen, 2012年01月31日 19:10 | review | ||
| Messages (20) | |||
|---|---|---|---|
| msg147609 - (view) | Author: Éric Araujo (eric.araujo) * (Python committer) | 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) * (Python committer) | Date: 2011年11月20日 20:09 | |
Attached a patch. |
|||
| msg148029 - (view) | Author: Eli Bendersky (eli.bendersky) * (Python committer) | Date: 2011年11月21日 04:28 | |
LGTM |
|||
| msg148042 - (view) | Author: Éric Araujo (eric.araujo) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) (Python triager) | 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) * (Python triager) | 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) * (Python committer) | 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) * (Python committer) | 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. |
|||
| History | |||
|---|---|---|---|
| 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 | |