py.exe shebang processing only runs python version installed by pymanager #91

Description

@clint-lawrence

Describe the bug
When running a script with a shebang, only python versions installed by pymanager will be run. When the shebang specifies a python version installed with a different method, py.exe incorrectly uses the default interpreter version instead. The intended version is available from an existing installation and is shown in pymanage list

To Reproduce
On the system below Python 3.10 has been installed using pymanage, and Python3.12 is an existing installation.

PS C:\Users\clawrence\dev\pymanager> pymanager list
Tag Name Managed By Version Alias
3.10[-64] Python 3.10.11 PythonCore 3.10.11 python[w]3.10.exe, python[w]3.exe
3.14-dev[-64] * Python 3.14.0b1 PythonCore 3.14.0b1 python[w]3-64.exe, python[w]3.14-64.exe, python...
* These runtimes were found, but cannot be updated or uninstalled. *
3.13 Python 3.13 (64-bit) PythonCore 3.13.0
3.13 Python 3.13 (64-bit) PythonCore 3.13.3
3.12 Python 3.12 (64-bit) PythonCore 3.12.7
3.11 Python 3.11 (64-bit) PythonCore 3.11.9
3.10 Python 3.10 (64-bit) PythonCore 3.10.11
3.8 Python 3.8 (64-bit) PythonCore 3.8.10
Some columns were truncated. Use '--format=json' or '--format=jsonl' for full information.

Create two test scripts with a shebang that call the desired python version:

PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.12
>> import sys
>> print(sys.version)
>> print(sys.executable)" | Out-File -FilePath 3.12.py
PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.10
>> import sys
>> print(sys.version)
>> print(sys.executable)" | Out-File -FilePath 3.10.py

Calling Python 3.12 (which was not installed by pymanager) runs the default interpreter:

PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe

Calling Python 3.10 (installed by pymanager) runs correctly:

PS C:\Users\clawrence\dev\pymanager> py .\3.10.py
3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]

py.exe can run both interpreters correctly when specified as a cli arg:

C:\Users\clawrence\AppData\Local\Python\pythoncore-3.10-64\python.exe
PS C:\Users\clawrence\dev\pymanager> py -3.12 --version
Python 3.12.7
PS C:\Users\clawrence\dev\pymanager> py -3.10 --version
Python 3.10.11

Installing 3.12 using pymanager and the shebang works correctly:

PS C:\Users\clawrence\dev\pymanager> pymanager install 3.12
Installing Python 3.12.10.
Extracting: ...................................................................✅
Global shortcuts directory is not on PATH. Add it for easy access to global Python commands.
Directory to add: C:\Users\clawrence\AppData\Local\Python\bin
Python 3.12.10 will be launched by python3-64.exe, python3.12-64.exe, python3.12.exe, python3.exe, pythonw3-64.exe, pythonw3.12-64.exe, pythonw3.12.exe, pythonw3.exe
PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
C:\Users\clawrence\AppData\Local\Python\pythoncore-3.12-64\python.exe
PS C:\Users\clawrence\dev\pymanager> pymanager uninstall 3.12
Uninstall Python 3.12.10? [Y/n] y
Removed Python 3.12.10
PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
PS C:\Users\clawrence\dev\pymanager>

Expected behavior
py.exe should use the python version specified in the shebang, or return an error it the requested version isn't found.

Additional context

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
     blocks
    (function() {
    function addCopyButtons() {
    document.querySelectorAll('pre code').forEach(function(codeBlock) {
    if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
    codeBlock.parentElement.setAttribute('data-copy-added', 'true');
    var btn = document.createElement('button');
    btn.textContent = 'Copy';
    btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
    btn.onmouseover = function() { this.style.opacity = '1'; };
    btn.onmouseout = function() { this.style.opacity = '0.7'; };
    btn.onclick = function() {
    navigator.clipboard.writeText(codeBlock.textContent).then(function() {
    btn.textContent = 'Copied!';
    setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
    });
    };
    codeBlock.parentElement.style.position = 'relative';
    codeBlock.parentElement.appendChild(btn);
    });
    }
    addCopyButtons();
    // Re-run on dynamic content
    var observer = new MutationObserver(addCopyButtons);
    observer.observe(document.body, { childList: true, subtree: true });
    })();
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    py.exe shebang processing only runs python version installed by pymanager #91

    Description

    @clint-lawrence

    Describe the bug
    When running a script with a shebang, only python versions installed by pymanager will be run. When the shebang specifies a python version installed with a different method, py.exe incorrectly uses the default interpreter version instead. The intended version is available from an existing installation and is shown in pymanage list

    To Reproduce
    On the system below Python 3.10 has been installed using pymanage, and Python3.12 is an existing installation.

    PS C:\Users\clawrence\dev\pymanager> pymanager list
    Tag Name Managed By Version Alias
    3.10[-64] Python 3.10.11 PythonCore 3.10.11 python[w]3.10.exe, python[w]3.exe
    3.14-dev[-64] * Python 3.14.0b1 PythonCore 3.14.0b1 python[w]3-64.exe, python[w]3.14-64.exe, python...
    * These runtimes were found, but cannot be updated or uninstalled. *
    3.13 Python 3.13 (64-bit) PythonCore 3.13.0
    3.13 Python 3.13 (64-bit) PythonCore 3.13.3
    3.12 Python 3.12 (64-bit) PythonCore 3.12.7
    3.11 Python 3.11 (64-bit) PythonCore 3.11.9
    3.10 Python 3.10 (64-bit) PythonCore 3.10.11
    3.8 Python 3.8 (64-bit) PythonCore 3.8.10
    Some columns were truncated. Use '--format=json' or '--format=jsonl' for full information.
    

    Create two test scripts with a shebang that call the desired python version:

    PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.12
    >> import sys
    >> print(sys.version)
    >> print(sys.executable)" | Out-File -FilePath 3.12.py
    PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.10
    >> import sys
    >> print(sys.version)
    >> print(sys.executable)" | Out-File -FilePath 3.10.py
    

    Calling Python 3.12 (which was not installed by pymanager) runs the default interpreter:

    PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
    3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
    C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
    

    Calling Python 3.10 (installed by pymanager) runs correctly:

    PS C:\Users\clawrence\dev\pymanager> py .\3.10.py
    3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
    

    py.exe can run both interpreters correctly when specified as a cli arg:

    C:\Users\clawrence\AppData\Local\Python\pythoncore-3.10-64\python.exe
    PS C:\Users\clawrence\dev\pymanager> py -3.12 --version
    Python 3.12.7
    PS C:\Users\clawrence\dev\pymanager> py -3.10 --version
    Python 3.10.11
    

    Installing 3.12 using pymanager and the shebang works correctly:

    PS C:\Users\clawrence\dev\pymanager> pymanager install 3.12
    Installing Python 3.12.10.
    Extracting: ...................................................................✅
    Global shortcuts directory is not on PATH. Add it for easy access to global Python commands.
    Directory to add: C:\Users\clawrence\AppData\Local\Python\bin
    Python 3.12.10 will be launched by python3-64.exe, python3.12-64.exe, python3.12.exe, python3.exe, pythonw3-64.exe, pythonw3.12-64.exe, pythonw3.12.exe, pythonw3.exe
    PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
    3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
    C:\Users\clawrence\AppData\Local\Python\pythoncore-3.12-64\python.exe
    PS C:\Users\clawrence\dev\pymanager> pymanager uninstall 3.12
    Uninstall Python 3.12.10? [Y/n] y
    Removed Python 3.12.10
    PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
    3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
    C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
    PS C:\Users\clawrence\dev\pymanager>
    

    Expected behavior
    py.exe should use the python version specified in the shebang, or return an error it the requested version isn't found.

    Additional context

    Metadata

    Metadata

    Assignees

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      py.exe shebang processing only runs python version installed by pymanager #91

      Description

      @clint-lawrence

      Describe the bug
      When running a script with a shebang, only python versions installed by pymanager will be run. When the shebang specifies a python version installed with a different method, py.exe incorrectly uses the default interpreter version instead. The intended version is available from an existing installation and is shown in pymanage list

      To Reproduce
      On the system below Python 3.10 has been installed using pymanage, and Python3.12 is an existing installation.

      PS C:\Users\clawrence\dev\pymanager> pymanager list
      Tag Name Managed By Version Alias
      3.10[-64] Python 3.10.11 PythonCore 3.10.11 python[w]3.10.exe, python[w]3.exe
      3.14-dev[-64] * Python 3.14.0b1 PythonCore 3.14.0b1 python[w]3-64.exe, python[w]3.14-64.exe, python...
      * These runtimes were found, but cannot be updated or uninstalled. *
      3.13 Python 3.13 (64-bit) PythonCore 3.13.0
      3.13 Python 3.13 (64-bit) PythonCore 3.13.3
      3.12 Python 3.12 (64-bit) PythonCore 3.12.7
      3.11 Python 3.11 (64-bit) PythonCore 3.11.9
      3.10 Python 3.10 (64-bit) PythonCore 3.10.11
      3.8 Python 3.8 (64-bit) PythonCore 3.8.10
      Some columns were truncated. Use '--format=json' or '--format=jsonl' for full information.
      

      Create two test scripts with a shebang that call the desired python version:

      PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.12
      >> import sys
      >> print(sys.version)
      >> print(sys.executable)" | Out-File -FilePath 3.12.py
      PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.10
      >> import sys
      >> print(sys.version)
      >> print(sys.executable)" | Out-File -FilePath 3.10.py
      

      Calling Python 3.12 (which was not installed by pymanager) runs the default interpreter:

      PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
      3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
      C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
      

      Calling Python 3.10 (installed by pymanager) runs correctly:

      PS C:\Users\clawrence\dev\pymanager> py .\3.10.py
      3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
      

      py.exe can run both interpreters correctly when specified as a cli arg:

      C:\Users\clawrence\AppData\Local\Python\pythoncore-3.10-64\python.exe
      PS C:\Users\clawrence\dev\pymanager> py -3.12 --version
      Python 3.12.7
      PS C:\Users\clawrence\dev\pymanager> py -3.10 --version
      Python 3.10.11
      

      Installing 3.12 using pymanager and the shebang works correctly:

      PS C:\Users\clawrence\dev\pymanager> pymanager install 3.12
      Installing Python 3.12.10.
      Extracting: ...................................................................✅
      Global shortcuts directory is not on PATH. Add it for easy access to global Python commands.
      Directory to add: C:\Users\clawrence\AppData\Local\Python\bin
      Python 3.12.10 will be launched by python3-64.exe, python3.12-64.exe, python3.12.exe, python3.exe, pythonw3-64.exe, pythonw3.12-64.exe, pythonw3.12.exe, pythonw3.exe
      PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
      3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
      C:\Users\clawrence\AppData\Local\Python\pythoncore-3.12-64\python.exe
      PS C:\Users\clawrence\dev\pymanager> pymanager uninstall 3.12
      Uninstall Python 3.12.10? [Y/n] y
      Removed Python 3.12.10
      PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
      3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
      C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
      PS C:\Users\clawrence\dev\pymanager>
      

      Expected behavior
      py.exe should use the python version specified in the shebang, or return an error it the requested version isn't found.

      Additional context

      Metadata

      Metadata

      Assignees

      Labels

      bugSomething isn't working

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        py.exe shebang processing only runs python version installed by pymanager #91

        Description

        @clint-lawrence

        Describe the bug
        When running a script with a shebang, only python versions installed by pymanager will be run. When the shebang specifies a python version installed with a different method, py.exe incorrectly uses the default interpreter version instead. The intended version is available from an existing installation and is shown in pymanage list

        To Reproduce
        On the system below Python 3.10 has been installed using pymanage, and Python3.12 is an existing installation.

        PS C:\Users\clawrence\dev\pymanager> pymanager list
        Tag Name Managed By Version Alias
        3.10[-64] Python 3.10.11 PythonCore 3.10.11 python[w]3.10.exe, python[w]3.exe
        3.14-dev[-64] * Python 3.14.0b1 PythonCore 3.14.0b1 python[w]3-64.exe, python[w]3.14-64.exe, python...
        * These runtimes were found, but cannot be updated or uninstalled. *
        3.13 Python 3.13 (64-bit) PythonCore 3.13.0
        3.13 Python 3.13 (64-bit) PythonCore 3.13.3
        3.12 Python 3.12 (64-bit) PythonCore 3.12.7
        3.11 Python 3.11 (64-bit) PythonCore 3.11.9
        3.10 Python 3.10 (64-bit) PythonCore 3.10.11
        3.8 Python 3.8 (64-bit) PythonCore 3.8.10
        Some columns were truncated. Use '--format=json' or '--format=jsonl' for full information.
        

        Create two test scripts with a shebang that call the desired python version:

        PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.12
        >> import sys
        >> print(sys.version)
        >> print(sys.executable)" | Out-File -FilePath 3.12.py
        PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.10
        >> import sys
        >> print(sys.version)
        >> print(sys.executable)" | Out-File -FilePath 3.10.py
        

        Calling Python 3.12 (which was not installed by pymanager) runs the default interpreter:

        PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
        3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
        C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
        

        Calling Python 3.10 (installed by pymanager) runs correctly:

        PS C:\Users\clawrence\dev\pymanager> py .\3.10.py
        3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
        

        py.exe can run both interpreters correctly when specified as a cli arg:

        C:\Users\clawrence\AppData\Local\Python\pythoncore-3.10-64\python.exe
        PS C:\Users\clawrence\dev\pymanager> py -3.12 --version
        Python 3.12.7
        PS C:\Users\clawrence\dev\pymanager> py -3.10 --version
        Python 3.10.11
        

        Installing 3.12 using pymanager and the shebang works correctly:

        PS C:\Users\clawrence\dev\pymanager> pymanager install 3.12
        Installing Python 3.12.10.
        Extracting: ...................................................................✅
        Global shortcuts directory is not on PATH. Add it for easy access to global Python commands.
        Directory to add: C:\Users\clawrence\AppData\Local\Python\bin
        Python 3.12.10 will be launched by python3-64.exe, python3.12-64.exe, python3.12.exe, python3.exe, pythonw3-64.exe, pythonw3.12-64.exe, pythonw3.12.exe, pythonw3.exe
        PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
        3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
        C:\Users\clawrence\AppData\Local\Python\pythoncore-3.12-64\python.exe
        PS C:\Users\clawrence\dev\pymanager> pymanager uninstall 3.12
        Uninstall Python 3.12.10? [Y/n] y
        Removed Python 3.12.10
        PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
        3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
        C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
        PS C:\Users\clawrence\dev\pymanager>
        

        Expected behavior
        py.exe should use the python version specified in the shebang, or return an error it the requested version isn't found.

        Additional context

        Metadata

        Metadata

        Assignees

        Labels

        bugSomething isn't working

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          py.exe shebang processing only runs python version installed by pymanager #91

          Description

          @clint-lawrence

          Describe the bug
          When running a script with a shebang, only python versions installed by pymanager will be run. When the shebang specifies a python version installed with a different method, py.exe incorrectly uses the default interpreter version instead. The intended version is available from an existing installation and is shown in pymanage list

          To Reproduce
          On the system below Python 3.10 has been installed using pymanage, and Python3.12 is an existing installation.

          PS C:\Users\clawrence\dev\pymanager> pymanager list
          Tag Name Managed By Version Alias
          3.10[-64] Python 3.10.11 PythonCore 3.10.11 python[w]3.10.exe, python[w]3.exe
          3.14-dev[-64] * Python 3.14.0b1 PythonCore 3.14.0b1 python[w]3-64.exe, python[w]3.14-64.exe, python...
          * These runtimes were found, but cannot be updated or uninstalled. *
          3.13 Python 3.13 (64-bit) PythonCore 3.13.0
          3.13 Python 3.13 (64-bit) PythonCore 3.13.3
          3.12 Python 3.12 (64-bit) PythonCore 3.12.7
          3.11 Python 3.11 (64-bit) PythonCore 3.11.9
          3.10 Python 3.10 (64-bit) PythonCore 3.10.11
          3.8 Python 3.8 (64-bit) PythonCore 3.8.10
          Some columns were truncated. Use '--format=json' or '--format=jsonl' for full information.
          

          Create two test scripts with a shebang that call the desired python version:

          PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.12
          >> import sys
          >> print(sys.version)
          >> print(sys.executable)" | Out-File -FilePath 3.12.py
          PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.10
          >> import sys
          >> print(sys.version)
          >> print(sys.executable)" | Out-File -FilePath 3.10.py
          

          Calling Python 3.12 (which was not installed by pymanager) runs the default interpreter:

          PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
          3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
          C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
          

          Calling Python 3.10 (installed by pymanager) runs correctly:

          PS C:\Users\clawrence\dev\pymanager> py .\3.10.py
          3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
          

          py.exe can run both interpreters correctly when specified as a cli arg:

          C:\Users\clawrence\AppData\Local\Python\pythoncore-3.10-64\python.exe
          PS C:\Users\clawrence\dev\pymanager> py -3.12 --version
          Python 3.12.7
          PS C:\Users\clawrence\dev\pymanager> py -3.10 --version
          Python 3.10.11
          

          Installing 3.12 using pymanager and the shebang works correctly:

          PS C:\Users\clawrence\dev\pymanager> pymanager install 3.12
          Installing Python 3.12.10.
          Extracting: ...................................................................✅
          Global shortcuts directory is not on PATH. Add it for easy access to global Python commands.
          Directory to add: C:\Users\clawrence\AppData\Local\Python\bin
          Python 3.12.10 will be launched by python3-64.exe, python3.12-64.exe, python3.12.exe, python3.exe, pythonw3-64.exe, pythonw3.12-64.exe, pythonw3.12.exe, pythonw3.exe
          PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
          3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
          C:\Users\clawrence\AppData\Local\Python\pythoncore-3.12-64\python.exe
          PS C:\Users\clawrence\dev\pymanager> pymanager uninstall 3.12
          Uninstall Python 3.12.10? [Y/n] y
          Removed Python 3.12.10
          PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
          3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
          C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
          PS C:\Users\clawrence\dev\pymanager>
          

          Expected behavior
          py.exe should use the python version specified in the shebang, or return an error it the requested version isn't found.

          Additional context

          Metadata

          Metadata

          Assignees

          Labels

          bugSomething isn't working

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            py.exe shebang processing only runs python version installed by pymanager #91

            Description

            @clint-lawrence

            Describe the bug
            When running a script with a shebang, only python versions installed by pymanager will be run. When the shebang specifies a python version installed with a different method, py.exe incorrectly uses the default interpreter version instead. The intended version is available from an existing installation and is shown in pymanage list

            To Reproduce
            On the system below Python 3.10 has been installed using pymanage, and Python3.12 is an existing installation.

            PS C:\Users\clawrence\dev\pymanager> pymanager list
            Tag Name Managed By Version Alias
            3.10[-64] Python 3.10.11 PythonCore 3.10.11 python[w]3.10.exe, python[w]3.exe
            3.14-dev[-64] * Python 3.14.0b1 PythonCore 3.14.0b1 python[w]3-64.exe, python[w]3.14-64.exe, python...
            * These runtimes were found, but cannot be updated or uninstalled. *
            3.13 Python 3.13 (64-bit) PythonCore 3.13.0
            3.13 Python 3.13 (64-bit) PythonCore 3.13.3
            3.12 Python 3.12 (64-bit) PythonCore 3.12.7
            3.11 Python 3.11 (64-bit) PythonCore 3.11.9
            3.10 Python 3.10 (64-bit) PythonCore 3.10.11
            3.8 Python 3.8 (64-bit) PythonCore 3.8.10
            Some columns were truncated. Use '--format=json' or '--format=jsonl' for full information.
            

            Create two test scripts with a shebang that call the desired python version:

            PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.12
            >> import sys
            >> print(sys.version)
            >> print(sys.executable)" | Out-File -FilePath 3.12.py
            PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.10
            >> import sys
            >> print(sys.version)
            >> print(sys.executable)" | Out-File -FilePath 3.10.py
            

            Calling Python 3.12 (which was not installed by pymanager) runs the default interpreter:

            PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
            3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
            C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
            

            Calling Python 3.10 (installed by pymanager) runs correctly:

            PS C:\Users\clawrence\dev\pymanager> py .\3.10.py
            3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
            

            py.exe can run both interpreters correctly when specified as a cli arg:

            C:\Users\clawrence\AppData\Local\Python\pythoncore-3.10-64\python.exe
            PS C:\Users\clawrence\dev\pymanager> py -3.12 --version
            Python 3.12.7
            PS C:\Users\clawrence\dev\pymanager> py -3.10 --version
            Python 3.10.11
            

            Installing 3.12 using pymanager and the shebang works correctly:

            PS C:\Users\clawrence\dev\pymanager> pymanager install 3.12
            Installing Python 3.12.10.
            Extracting: ...................................................................✅
            Global shortcuts directory is not on PATH. Add it for easy access to global Python commands.
            Directory to add: C:\Users\clawrence\AppData\Local\Python\bin
            Python 3.12.10 will be launched by python3-64.exe, python3.12-64.exe, python3.12.exe, python3.exe, pythonw3-64.exe, pythonw3.12-64.exe, pythonw3.12.exe, pythonw3.exe
            PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
            3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
            C:\Users\clawrence\AppData\Local\Python\pythoncore-3.12-64\python.exe
            PS C:\Users\clawrence\dev\pymanager> pymanager uninstall 3.12
            Uninstall Python 3.12.10? [Y/n] y
            Removed Python 3.12.10
            PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
            3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
            C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
            PS C:\Users\clawrence\dev\pymanager>
            

            Expected behavior
            py.exe should use the python version specified in the shebang, or return an error it the requested version isn't found.

            Additional context

            Metadata

            Metadata

            Assignees

            Labels

            bugSomething isn't working

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              py.exe shebang processing only runs python version installed by pymanager #91

              Description

              @clint-lawrence

              Describe the bug
              When running a script with a shebang, only python versions installed by pymanager will be run. When the shebang specifies a python version installed with a different method, py.exe incorrectly uses the default interpreter version instead. The intended version is available from an existing installation and is shown in pymanage list

              To Reproduce
              On the system below Python 3.10 has been installed using pymanage, and Python3.12 is an existing installation.

              PS C:\Users\clawrence\dev\pymanager> pymanager list
              Tag Name Managed By Version Alias
              3.10[-64] Python 3.10.11 PythonCore 3.10.11 python[w]3.10.exe, python[w]3.exe
              3.14-dev[-64] * Python 3.14.0b1 PythonCore 3.14.0b1 python[w]3-64.exe, python[w]3.14-64.exe, python...
              * These runtimes were found, but cannot be updated or uninstalled. *
              3.13 Python 3.13 (64-bit) PythonCore 3.13.0
              3.13 Python 3.13 (64-bit) PythonCore 3.13.3
              3.12 Python 3.12 (64-bit) PythonCore 3.12.7
              3.11 Python 3.11 (64-bit) PythonCore 3.11.9
              3.10 Python 3.10 (64-bit) PythonCore 3.10.11
              3.8 Python 3.8 (64-bit) PythonCore 3.8.10
              Some columns were truncated. Use '--format=json' or '--format=jsonl' for full information.
              

              Create two test scripts with a shebang that call the desired python version:

              PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.12
              >> import sys
              >> print(sys.version)
              >> print(sys.executable)" | Out-File -FilePath 3.12.py
              PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.10
              >> import sys
              >> print(sys.version)
              >> print(sys.executable)" | Out-File -FilePath 3.10.py
              

              Calling Python 3.12 (which was not installed by pymanager) runs the default interpreter:

              PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
              3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
              C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
              

              Calling Python 3.10 (installed by pymanager) runs correctly:

              PS C:\Users\clawrence\dev\pymanager> py .\3.10.py
              3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
              

              py.exe can run both interpreters correctly when specified as a cli arg:

              C:\Users\clawrence\AppData\Local\Python\pythoncore-3.10-64\python.exe
              PS C:\Users\clawrence\dev\pymanager> py -3.12 --version
              Python 3.12.7
              PS C:\Users\clawrence\dev\pymanager> py -3.10 --version
              Python 3.10.11
              

              Installing 3.12 using pymanager and the shebang works correctly:

              PS C:\Users\clawrence\dev\pymanager> pymanager install 3.12
              Installing Python 3.12.10.
              Extracting: ...................................................................✅
              Global shortcuts directory is not on PATH. Add it for easy access to global Python commands.
              Directory to add: C:\Users\clawrence\AppData\Local\Python\bin
              Python 3.12.10 will be launched by python3-64.exe, python3.12-64.exe, python3.12.exe, python3.exe, pythonw3-64.exe, pythonw3.12-64.exe, pythonw3.12.exe, pythonw3.exe
              PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
              3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
              C:\Users\clawrence\AppData\Local\Python\pythoncore-3.12-64\python.exe
              PS C:\Users\clawrence\dev\pymanager> pymanager uninstall 3.12
              Uninstall Python 3.12.10? [Y/n] y
              Removed Python 3.12.10
              PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
              3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
              C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
              PS C:\Users\clawrence\dev\pymanager>
              

              Expected behavior
              py.exe should use the python version specified in the shebang, or return an error it the requested version isn't found.

              Additional context

              Metadata

              Metadata

              Assignees

              Labels

              bugSomething isn't working

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                py.exe shebang processing only runs python version installed by pymanager #91

                Description

                @clint-lawrence

                Describe the bug
                When running a script with a shebang, only python versions installed by pymanager will be run. When the shebang specifies a python version installed with a different method, py.exe incorrectly uses the default interpreter version instead. The intended version is available from an existing installation and is shown in pymanage list

                To Reproduce
                On the system below Python 3.10 has been installed using pymanage, and Python3.12 is an existing installation.

                PS C:\Users\clawrence\dev\pymanager> pymanager list
                Tag Name Managed By Version Alias
                3.10[-64] Python 3.10.11 PythonCore 3.10.11 python[w]3.10.exe, python[w]3.exe
                3.14-dev[-64] * Python 3.14.0b1 PythonCore 3.14.0b1 python[w]3-64.exe, python[w]3.14-64.exe, python...
                * These runtimes were found, but cannot be updated or uninstalled. *
                3.13 Python 3.13 (64-bit) PythonCore 3.13.0
                3.13 Python 3.13 (64-bit) PythonCore 3.13.3
                3.12 Python 3.12 (64-bit) PythonCore 3.12.7
                3.11 Python 3.11 (64-bit) PythonCore 3.11.9
                3.10 Python 3.10 (64-bit) PythonCore 3.10.11
                3.8 Python 3.8 (64-bit) PythonCore 3.8.10
                Some columns were truncated. Use '--format=json' or '--format=jsonl' for full information.
                

                Create two test scripts with a shebang that call the desired python version:

                PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.12
                >> import sys
                >> print(sys.version)
                >> print(sys.executable)" | Out-File -FilePath 3.12.py
                PS C:\Users\clawrence\dev\pymanager> "#! /usr/bin/env python3.10
                >> import sys
                >> print(sys.version)
                >> print(sys.executable)" | Out-File -FilePath 3.10.py
                

                Calling Python 3.12 (which was not installed by pymanager) runs the default interpreter:

                PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
                3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
                C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
                

                Calling Python 3.10 (installed by pymanager) runs correctly:

                PS C:\Users\clawrence\dev\pymanager> py .\3.10.py
                3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
                

                py.exe can run both interpreters correctly when specified as a cli arg:

                C:\Users\clawrence\AppData\Local\Python\pythoncore-3.10-64\python.exe
                PS C:\Users\clawrence\dev\pymanager> py -3.12 --version
                Python 3.12.7
                PS C:\Users\clawrence\dev\pymanager> py -3.10 --version
                Python 3.10.11
                

                Installing 3.12 using pymanager and the shebang works correctly:

                PS C:\Users\clawrence\dev\pymanager> pymanager install 3.12
                Installing Python 3.12.10.
                Extracting: ...................................................................✅
                Global shortcuts directory is not on PATH. Add it for easy access to global Python commands.
                Directory to add: C:\Users\clawrence\AppData\Local\Python\bin
                Python 3.12.10 will be launched by python3-64.exe, python3.12-64.exe, python3.12.exe, python3.exe, pythonw3-64.exe, pythonw3.12-64.exe, pythonw3.12.exe, pythonw3.exe
                PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
                3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]
                C:\Users\clawrence\AppData\Local\Python\pythoncore-3.12-64\python.exe
                PS C:\Users\clawrence\dev\pymanager> pymanager uninstall 3.12
                Uninstall Python 3.12.10? [Y/n] y
                Removed Python 3.12.10
                PS C:\Users\clawrence\dev\pymanager> py .\3.12.py
                3.14.0b1 (tags/v3.14.0b1:b092705, May 7 2025, 10:22:31) [MSC v.1943 64 bit (AMD64)]
                C:\Users\clawrence\AppData\Local\Python\pythoncore-3.14-64\python.exe
                PS C:\Users\clawrence\dev\pymanager>
                

                Expected behavior
                py.exe should use the python version specified in the shebang, or return an error it the requested version isn't found.

                Additional context

                Metadata

                Metadata

                Assignees

                Labels

                bugSomething isn't working

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions