Title: sys._base_executable may not exist on posix venvs made with `--copies` · Issue #99204 · python/cpython · GitHub
Open Graph Title: sys._base_executable may not exist on posix venvs made with `--copies` · Issue #99204 · python/cpython
X Title: sys._base_executable may not exist on posix venvs made with `--copies` · Issue #99204 · python/cpython
Description: Bug report Python venv on POSIX environments creates a bin directory with: python python{VERSION_MAJOR} python(VERSION_MAJOR}.{VERSION_MINOR} When executing python out of a venv made with the --copies argument specified (that is, it does...
Open Graph Description: Bug report Python venv on POSIX environments creates a bin directory with: python python{VERSION_MAJOR} python(VERSION_MAJOR}.{VERSION_MINOR} When executing python out of a venv made with the --cop...
X Description: Bug report Python venv on POSIX environments creates a bin directory with: python python{VERSION_MAJOR} python(VERSION_MAJOR}.{VERSION_MINOR} When executing python out of a venv made with the --cop...
Opengraph URL: https://github.com/python/cpython/issues/99204
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"sys._base_executable may not exist on posix venvs made with `--copies`","articleBody":"\u003c!--\r\n If you're new to Python and you're not sure whether what you're experiencing is a bug, the CPython issue tracker is not\r\n the right place to seek help. Consider the following options instead:\r\n\r\n - reading the Python tutorial: https://docs.python.org/3/tutorial/\r\n - posting in the \"Users\" category on [discuss.python.org](http://discuss.python.org/): https://discuss.python.org/c/users/7\r\n - emailing the Python-list mailing list: https://mail.python.org/mailman/listinfo/python-list\r\n - searching our issue tracker (https://github.com/python/cpython/issues) to see if\r\n your problem has already been reported\r\n--\u003e\r\n\r\n\r\n# Bug report\r\n\r\nPython `venv` on POSIX environments creates a bin directory with:\r\n- `python`\r\n- `python{VERSION_MAJOR}`\r\n- `python(VERSION_MAJOR}.{VERSION_MINOR}`\r\n\r\nWhen executing `python` out of a venv made with the `--copies` argument specified (that is, it doesn't use symlinks), the calculation of `base_executable` will blindly append the basename of the executable to the value from the `home` key from `pyvenv.cfg`, meaning base_executable = $home_dir/basename(executable)\r\n \r\nWith recent changes made in 3.11, on Linux, the `home` key is determined by the `base_executable` of the initial python that created the venv. Even if the venv is \"nested\", `home` will still point to the topmost non-venv python bin path. \r\n\r\nHowever, this can be problematic because source installations via `make install` only provide:\r\n- `python{VERSION_MAJOR}`\r\n- `python(VERSION_MAJOR}.{VERSION_MINOR}`\r\n\r\nThis means if \"python\" is invoked from a venv, the resultant `base_executable` may be an invalid file that applications may be relying upon via `sys._base_executable` (both `venv` and `virtualenv` use this value)\r\n\r\nMost distributions do not distribute a version-less \"python\" as part of the divorce of python2 and python3 via guidance from PEP 394 (though some offer a convenience package to symlink it)\r\n\r\nA suggested fix in previous discussions was to include a field in pyvenv.cfg specifying the base executable, but that may require updates to PEP 405 since there's only two documented keys for this file and other implementations such as `virtualenv` would want to conform to new specifications (virtualenv already stores a base-executable key so there could be a conflict)\r\n\r\nIn lieu of that, a simple `stat` to check for alternatives seems reasonable without impacting startup performance overly much.\r\n\r\nSince this affects 3.11+, it'd be nice to see a fix backported to that branch.\r\n\r\nExample:\r\n\r\n```\r\nvfazio@Zephyrus:~/development/cpython$ ./configure\r\nvfazio@Zephyrus:~/development/cpython$ make -j12\r\nvfazio@Zephyrus:~/development/cpython$ DESTDIR=/tmp/tmp.w9Bqq4Aibx/ make install\r\nvfazio@Zephyrus:~/development/cpython$ cd /tmp/tmp.w9Bqq4Aibx/\r\nvfazio@Zephyrus:~/development/cpython$ /tmp/tmp.w9Bqq4Aibx/usr/local/bin/python3 -V\r\nPython 3.12.0a1+\r\nvfazio@Zephyrus:~/development/cpython$ /tmp/tmp.w9Bqq4Aibx/usr/local/bin/python3 -m venv --clear --copies /tmp/tmp.307I606AVh/\r\nvfazio@Zephyrus:~/development/cpython$ /tmp/tmp.307I606AVh/bin/python -c \"import sys; print((sys._base_executable, sys.version))\"\r\n('/tmp/tmp.w9Bqq4Aibx/usr/local/bin/python', '3.12.0a1+ (heads/vfazio-base-exec-fallback:267e1040a9, Nov 6 2022, 15:16:06) [GCC 9.4.0]')\r\nvfazio@Zephyrus:~/development/cpython$ test -e /tmp/tmp.w9Bqq4Aibx/usr/local/bin/python; echo $?\r\n1\r\nvfazio@Zephyrus:~/development/cpython$\r\n\r\n\r\nroot@fe1d04cd5d49:/tmp/tmp.SfKfnBG1SH# usr/local/bin/python3 -V\r\nPython 3.11.0\r\nroot@fe1d04cd5d49:/tmp/tmp.SfKfnBG1SH# mktemp -d\r\n/tmp/tmp.DDS5n25q4C\r\nroot@fe1d04cd5d49:/tmp/tmp.SfKfnBG1SH# usr/local/bin/python3 -m venv --copies --clear /tmp/tmp.DDS5n25q4C/\r\nroot@fe1d04cd5d49:/tmp/tmp.SfKfnBG1SH# /tmp/tmp.DDS5n25q4C/bin/python -c \"import sys; print((sys._base_executable, sys.version))\"\r\n('/tmp/tmp.SfKfnBG1SH/usr/local/bin/python', '3.11.0 (main, Nov 5 2022, 11:43:28) [GCC 10.2.1 20210110]')\r\nroot@fe1d04cd5d49:/tmp/tmp.SfKfnBG1SH# test -e /tmp/tmp.SfKfnBG1SH/usr/local/bin/python; echo $?\r\n1\r\n```\r\n\r\n\r\n# Your environment\r\n\r\n\u003c!-- Include as many relevant details as possible about the environment you experienced the bug in --\u003e\r\n\r\n- CPython versions tested on: 3.11, main (3.12.0a1+)\r\n- Operating system and architecture: Linux x86-64\r\n\r\n\u003c!--\r\nYou can freely edit this text. Remove any lines you believe are unnecessary.\r\n--\u003e\r\n\r\nrelated discussion and MRs:\r\nhttps://bugs.python.org/issue46028\r\nhttps://github.com/python/cpython/pull/29041\r\nhttps://github.com/python/cpython/pull/30144\r\n\r\nrelated issues:\r\nhttps://github.com/pypa/virtualenv/issues/2440\r\nhttps://github.com/python-poetry/poetry/issues/6940\n\n\u003c!-- gh-pr-number: gh-99206 --\u003e\n* PR: gh-99206\n\u003c!-- /gh-pr-number --\u003e\n\n\n\u003c!-- gh-pr-number: gh-99340 --\u003e\n* PR: gh-99340\n\u003c!-- /gh-pr-number --\u003e\n","author":{"url":"https://github.com/vfazio","@type":"Person","name":"vfazio"},"datePublished":"2022-11-07T15:10:59.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/99204/cpython/issues/99204"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:0050655e-c391-d402-abc1-fde787c6b9de |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B83C:2E599F:7CE1B6:AB4CFE:6969E1A3 |
| html-safe-nonce | 867610644f8edf17a16bad991730ad3d6e46fbfb9aca0af25b15051239cb503f |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCODNDOjJFNTk5Rjo3Q0UxQjY6QUI0Q0ZFOjY5NjlFMUEzIiwidmlzaXRvcl9pZCI6IjI4NjIwMTc0NDMwNDA3MTUxNzIiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 64b7476260cc7e527f3f972a3e0365e890808a7fde9806fff135eb233c468518 |
| hovercard-subject-tag | issue:1438525762 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/99204/issue_layout |
| twitter:image | https://opengraph.githubassets.com/feb3067811c7d760a991a0193705ab6ef68e20d9fa9ed7f4e5dc52b30c7a45b8/python/cpython/issues/99204 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/feb3067811c7d760a991a0193705ab6ef68e20d9fa9ed7f4e5dc52b30c7a45b8/python/cpython/issues/99204 |
| og:image:alt | Bug report Python venv on POSIX environments creates a bin directory with: python python{VERSION_MAJOR} python(VERSION_MAJOR}.{VERSION_MINOR} When executing python out of a venv made with the --cop... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | vfazio |
| hostname | github.com |
| expected-hostname | github.com |
| None | 7b32f1c7c4549428ee399213e8345494fc55b5637195d3fc5f493657579235e8 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | bdde15ad1b403e23b08bbd89b53fbe6bdf688cad |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width