1.5.0 broke installation of dependencies from .tar.gz URIs #3131

Description

@a-khabarov

🐞 bug report

Affected Rule

This may be caused by something in python/private/pypi/index_sources.bzl.
Commenting out .tar.gz in _KNOWN_EXTS appears to be a workaround for .tar.gz archives.

Is this a regression?

Yes, this problem doesn't occur in 1.4.1.
I've confirmed that this occurs in 1.5.0 and 1.5.1.

Description

1.5.0 (or one of its release candidates) broke installation of dependencies from .tar.gz URIs.
This could also be occurring for .zip URIs, but I haven't confirmed if this is the case.

🔬 Minimal Reproduction

With the following requirements.txt:

--index-url https://pypi.org/simple
uri @ https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz \
--hash=sha256:62db978313e289f7c83914454c46d50e1755857d41400ba196fd01533302c7f6

Calling

pip.parse(
hub_name = "hub_name_pip",
python_version = "3.13",
requirements_lock = "//requirements.txt",
)

produces a PIP repository that has version 2.0.1 of the uri package installed from PyPI (https://pypi.org/project/uri/2.0.1/).

This is not correct, as https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz should be installed instead.

🔥 Exception or Error

🌍 Your Environment

Operating System:


Linux

Output of bazel version:


Bazelisk version: development
Build label: 8.1.1
Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
Build time: Tue Feb 25 18:50:42 2025 (1740509442)
Build timestamp: 1740509442
Build timestamp as int: 1740509442

Rules_python version:


1.5.1

Anything else relevant?

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: pippip/pypi integration

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } 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

      1.5.0 broke installation of dependencies from .tar.gz URIs #3131

      Description

      @a-khabarov

      🐞 bug report

      Affected Rule

      This may be caused by something in python/private/pypi/index_sources.bzl.
      Commenting out .tar.gz in _KNOWN_EXTS appears to be a workaround for .tar.gz archives.

      Is this a regression?

      Yes, this problem doesn't occur in 1.4.1.
      I've confirmed that this occurs in 1.5.0 and 1.5.1.

      Description

      1.5.0 (or one of its release candidates) broke installation of dependencies from .tar.gz URIs.
      This could also be occurring for .zip URIs, but I haven't confirmed if this is the case.

      🔬 Minimal Reproduction

      With the following requirements.txt:

      --index-url https://pypi.org/simple
      uri @ https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz \
      --hash=sha256:62db978313e289f7c83914454c46d50e1755857d41400ba196fd01533302c7f6
      

      Calling

      pip.parse(
      hub_name = "hub_name_pip",
      python_version = "3.13",
      requirements_lock = "//requirements.txt",
      )
      

      produces a PIP repository that has version 2.0.1 of the uri package installed from PyPI (https://pypi.org/project/uri/2.0.1/).

      This is not correct, as https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz should be installed instead.

      🔥 Exception or Error

      🌍 Your Environment

      Operating System:

      
      Linux
      

      Output of bazel version:

      
      Bazelisk version: development
      Build label: 8.1.1
      Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
      Build time: Tue Feb 25 18:50:42 2025 (1740509442)
      Build timestamp: 1740509442
      Build timestamp as int: 1740509442
      

      Rules_python version:

      
      1.5.1
      

      Anything else relevant?

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        type: pippip/pypi integration

        Type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

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

          1.5.0 broke installation of dependencies from .tar.gz URIs #3131

          Description

          @a-khabarov

          🐞 bug report

          Affected Rule

          This may be caused by something in python/private/pypi/index_sources.bzl.
          Commenting out .tar.gz in _KNOWN_EXTS appears to be a workaround for .tar.gz archives.

          Is this a regression?

          Yes, this problem doesn't occur in 1.4.1.
          I've confirmed that this occurs in 1.5.0 and 1.5.1.

          Description

          1.5.0 (or one of its release candidates) broke installation of dependencies from .tar.gz URIs.
          This could also be occurring for .zip URIs, but I haven't confirmed if this is the case.

          🔬 Minimal Reproduction

          With the following requirements.txt:

          --index-url https://pypi.org/simple
          uri @ https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz \
          --hash=sha256:62db978313e289f7c83914454c46d50e1755857d41400ba196fd01533302c7f6
          

          Calling

          pip.parse(
          hub_name = "hub_name_pip",
          python_version = "3.13",
          requirements_lock = "//requirements.txt",
          )
          

          produces a PIP repository that has version 2.0.1 of the uri package installed from PyPI (https://pypi.org/project/uri/2.0.1/).

          This is not correct, as https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz should be installed instead.

          🔥 Exception or Error

          🌍 Your Environment

          Operating System:

          
          Linux
          

          Output of bazel version:

          
          Bazelisk version: development
          Build label: 8.1.1
          Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
          Build time: Tue Feb 25 18:50:42 2025 (1740509442)
          Build timestamp: 1740509442
          Build timestamp as int: 1740509442
          

          Rules_python version:

          
          1.5.1
          

          Anything else relevant?

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            type: pippip/pypi integration

            Type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

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

              1.5.0 broke installation of dependencies from .tar.gz URIs #3131

              Description

              @a-khabarov

              🐞 bug report

              Affected Rule

              This may be caused by something in python/private/pypi/index_sources.bzl.
              Commenting out .tar.gz in _KNOWN_EXTS appears to be a workaround for .tar.gz archives.

              Is this a regression?

              Yes, this problem doesn't occur in 1.4.1.
              I've confirmed that this occurs in 1.5.0 and 1.5.1.

              Description

              1.5.0 (or one of its release candidates) broke installation of dependencies from .tar.gz URIs.
              This could also be occurring for .zip URIs, but I haven't confirmed if this is the case.

              🔬 Minimal Reproduction

              With the following requirements.txt:

              --index-url https://pypi.org/simple
              uri @ https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz \
              --hash=sha256:62db978313e289f7c83914454c46d50e1755857d41400ba196fd01533302c7f6
              

              Calling

              pip.parse(
              hub_name = "hub_name_pip",
              python_version = "3.13",
              requirements_lock = "//requirements.txt",
              )
              

              produces a PIP repository that has version 2.0.1 of the uri package installed from PyPI (https://pypi.org/project/uri/2.0.1/).

              This is not correct, as https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz should be installed instead.

              🔥 Exception or Error

              🌍 Your Environment

              Operating System:

              
              Linux
              

              Output of bazel version:

              
              Bazelisk version: development
              Build label: 8.1.1
              Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
              Build time: Tue Feb 25 18:50:42 2025 (1740509442)
              Build timestamp: 1740509442
              Build timestamp as int: 1740509442
              

              Rules_python version:

              
              1.5.1
              

              Anything else relevant?

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                type: pippip/pypi integration

                Type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

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

                  1.5.0 broke installation of dependencies from .tar.gz URIs #3131

                  Description

                  @a-khabarov

                  🐞 bug report

                  Affected Rule

                  This may be caused by something in python/private/pypi/index_sources.bzl.
                  Commenting out .tar.gz in _KNOWN_EXTS appears to be a workaround for .tar.gz archives.

                  Is this a regression?

                  Yes, this problem doesn't occur in 1.4.1.
                  I've confirmed that this occurs in 1.5.0 and 1.5.1.

                  Description

                  1.5.0 (or one of its release candidates) broke installation of dependencies from .tar.gz URIs.
                  This could also be occurring for .zip URIs, but I haven't confirmed if this is the case.

                  🔬 Minimal Reproduction

                  With the following requirements.txt:

                  --index-url https://pypi.org/simple
                  uri @ https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz \
                  --hash=sha256:62db978313e289f7c83914454c46d50e1755857d41400ba196fd01533302c7f6
                  

                  Calling

                  pip.parse(
                  hub_name = "hub_name_pip",
                  python_version = "3.13",
                  requirements_lock = "//requirements.txt",
                  )
                  

                  produces a PIP repository that has version 2.0.1 of the uri package installed from PyPI (https://pypi.org/project/uri/2.0.1/).

                  This is not correct, as https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz should be installed instead.

                  🔥 Exception or Error

                  🌍 Your Environment

                  Operating System:

                  
                  Linux
                  

                  Output of bazel version:

                  
                  Bazelisk version: development
                  Build label: 8.1.1
                  Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
                  Build time: Tue Feb 25 18:50:42 2025 (1740509442)
                  Build timestamp: 1740509442
                  Build timestamp as int: 1740509442
                  

                  Rules_python version:

                  
                  1.5.1
                  

                  Anything else relevant?

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    type: pippip/pypi integration

                    Type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

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

                      1.5.0 broke installation of dependencies from .tar.gz URIs #3131

                      Description

                      @a-khabarov

                      🐞 bug report

                      Affected Rule

                      This may be caused by something in python/private/pypi/index_sources.bzl.
                      Commenting out .tar.gz in _KNOWN_EXTS appears to be a workaround for .tar.gz archives.

                      Is this a regression?

                      Yes, this problem doesn't occur in 1.4.1.
                      I've confirmed that this occurs in 1.5.0 and 1.5.1.

                      Description

                      1.5.0 (or one of its release candidates) broke installation of dependencies from .tar.gz URIs.
                      This could also be occurring for .zip URIs, but I haven't confirmed if this is the case.

                      🔬 Minimal Reproduction

                      With the following requirements.txt:

                      --index-url https://pypi.org/simple
                      uri @ https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz \
                      --hash=sha256:62db978313e289f7c83914454c46d50e1755857d41400ba196fd01533302c7f6
                      

                      Calling

                      pip.parse(
                      hub_name = "hub_name_pip",
                      python_version = "3.13",
                      requirements_lock = "//requirements.txt",
                      )
                      

                      produces a PIP repository that has version 2.0.1 of the uri package installed from PyPI (https://pypi.org/project/uri/2.0.1/).

                      This is not correct, as https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz should be installed instead.

                      🔥 Exception or Error

                      🌍 Your Environment

                      Operating System:

                      
                      Linux
                      

                      Output of bazel version:

                      
                      Bazelisk version: development
                      Build label: 8.1.1
                      Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
                      Build time: Tue Feb 25 18:50:42 2025 (1740509442)
                      Build timestamp: 1740509442
                      Build timestamp as int: 1740509442
                      

                      Rules_python version:

                      
                      1.5.1
                      

                      Anything else relevant?

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        type: pippip/pypi integration

                        Type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

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

                          1.5.0 broke installation of dependencies from .tar.gz URIs #3131

                          Description

                          @a-khabarov

                          🐞 bug report

                          Affected Rule

                          This may be caused by something in python/private/pypi/index_sources.bzl.
                          Commenting out .tar.gz in _KNOWN_EXTS appears to be a workaround for .tar.gz archives.

                          Is this a regression?

                          Yes, this problem doesn't occur in 1.4.1.
                          I've confirmed that this occurs in 1.5.0 and 1.5.1.

                          Description

                          1.5.0 (or one of its release candidates) broke installation of dependencies from .tar.gz URIs.
                          This could also be occurring for .zip URIs, but I haven't confirmed if this is the case.

                          🔬 Minimal Reproduction

                          With the following requirements.txt:

                          --index-url https://pypi.org/simple
                          uri @ https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz \
                          --hash=sha256:62db978313e289f7c83914454c46d50e1755857d41400ba196fd01533302c7f6
                          

                          Calling

                          pip.parse(
                          hub_name = "hub_name_pip",
                          python_version = "3.13",
                          requirements_lock = "//requirements.txt",
                          )
                          

                          produces a PIP repository that has version 2.0.1 of the uri package installed from PyPI (https://pypi.org/project/uri/2.0.1/).

                          This is not correct, as https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz should be installed instead.

                          🔥 Exception or Error

                          🌍 Your Environment

                          Operating System:

                          
                          Linux
                          

                          Output of bazel version:

                          
                          Bazelisk version: development
                          Build label: 8.1.1
                          Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
                          Build time: Tue Feb 25 18:50:42 2025 (1740509442)
                          Build timestamp: 1740509442
                          Build timestamp as int: 1740509442
                          

                          Rules_python version:

                          
                          1.5.1
                          

                          Anything else relevant?

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            type: pippip/pypi integration

                            Type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

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

                              1.5.0 broke installation of dependencies from .tar.gz URIs #3131

                              Description

                              @a-khabarov

                              🐞 bug report

                              Affected Rule

                              This may be caused by something in python/private/pypi/index_sources.bzl.
                              Commenting out .tar.gz in _KNOWN_EXTS appears to be a workaround for .tar.gz archives.

                              Is this a regression?

                              Yes, this problem doesn't occur in 1.4.1.
                              I've confirmed that this occurs in 1.5.0 and 1.5.1.

                              Description

                              1.5.0 (or one of its release candidates) broke installation of dependencies from .tar.gz URIs.
                              This could also be occurring for .zip URIs, but I haven't confirmed if this is the case.

                              🔬 Minimal Reproduction

                              With the following requirements.txt:

                              --index-url https://pypi.org/simple
                              uri @ https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz \
                              --hash=sha256:62db978313e289f7c83914454c46d50e1755857d41400ba196fd01533302c7f6
                              

                              Calling

                              pip.parse(
                              hub_name = "hub_name_pip",
                              python_version = "3.13",
                              requirements_lock = "//requirements.txt",
                              )
                              

                              produces a PIP repository that has version 2.0.1 of the uri package installed from PyPI (https://pypi.org/project/uri/2.0.1/).

                              This is not correct, as https://github.com/a-khabarov/uri/archive/b5af5b273e8ad182da3326569499d6b40be6341f.tar.gz should be installed instead.

                              🔥 Exception or Error

                              🌍 Your Environment

                              Operating System:

                              
                              Linux
                              

                              Output of bazel version:

                              
                              Bazelisk version: development
                              Build label: 8.1.1
                              Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
                              Build time: Tue Feb 25 18:50:42 2025 (1740509442)
                              Build timestamp: 1740509442
                              Build timestamp as int: 1740509442
                              

                              Rules_python version:

                              
                              1.5.1
                              

                              Anything else relevant?

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                type: pippip/pypi integration

                                Type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions