es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo anular globalmente un paquete de Python en Nix

Estoy tratando de anular un paquete de Python (uvloop) de manera global en nix, de modo que black reconozca la anulación.

Las pruebas de uvloop (paquete de Python) fallan para mí porque estoy trabajando detrás de un cortafuegos. Puedo construir cosas que usan uvloop editando directamente la derivación de nixpkgs (¡ugh!) para establecer doCheck = false.

Estoy tratando de codificar esto en una superposición, pero sin éxito: la superposición se lee (p. ej., los errores de sintaxis causan un fallo), pero nada de lo que hago en la superposición detiene realmente las pruebas de ejecutarse.

He probado siguiendo consejos de https://nixos.wiki/wiki/Overlays, https://nixos.org/manual/nixpkgs/stable/#how-to-override-a-python-package-using-overlays y https://stackoverflow.com/questions/68658367/how-to-use-custom-python-with-existing-packages-nix-derivation (superponiendo python usando packageOverrides; con pythonOverrides; y con y sin usar overridePythonAttrs); tanto para python3 como para python39; pero sin éxito.

Por ejemplo,

self: super: {
  python3 = super.python3.override {
    packageOverrides = pyself: pysuper: {
      uvloop = pysuper.uvloop.overrideAttrs (_: {
        doCheck = false;
      });
    };
  };
}

Como puntos extra, me gustaría lograr esto para todas las instancias del paquete de Python uvloop, no solo para la versión 3.9, pero agradeceré cualquier ayuda que pueda obtener.

Gracias,

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para anular un paquete de Python globalmente en Nix, puedes utilizar una superposición para agregar una nueva definición para el paquete en cuestión. En este caso, quieres anular el paquete uvloop para que sus pruebas no se ejecuten. Aquí tienes un ejemplo de superposición que debería funcionar:

    self: super: {
      python39 = super.python39.override {
        packageOverrides = pyself: pysuper: {
          uvloop = pysuper.uvloop.overrideAttrs (_: {
            doCheck = false;
          });
        };
      };
    }
    

    Esta superposición agrega una nueva definición para el paquete uvloop en la derivación python39. Establece el atributo doCheck en false, lo que debería evitar que se ejecuten las pruebas. Ten en cuenta que esta superposición solo afecta a la versión python39 de uvloop. Si quieres anular todas las versiones de uvloop, puedes usar overridePythonAttrs en su lugar:

    self: super: {
      python39 = super.python39.override {
        overridePythonAttrs = oldAttrs: {
          pythonPackages.uvloop = oldAttrs.pythonPackages.uvloop.overrideAttrs (_: {
            doCheck = false;
          });
        };
      };
    }
    

    Esta superposición utiliza overridePythonAttrs para modificar el atributo pythonPackages de la derivación python39. Anula la definición de uvloop con una nueva definición que establece doCheck en false. Este enfoque debería funcionar para todas las instancias del paquete uvloop en la derivación python39.

Comments are closed.