¿Cómo creo un GUID en Python que sea independiente de la plataforma? Escuché que hay un método que usa ActivePython en Windows, pero es Windows solo porque usa COM. ¿Hay algún método que use Python simple?
python
uuid
guid
uniqueidentifier
Jonathon Watney
fuente
fuente
python -c 'import uuid; print(uuid.uuid4())'
Respuestas:
Documentos:
Ejemplo (trabajando en 2 y 3):
fuente
shortuuid
módulo que escribí, ya que le permite generar UUID más cortos y legibles: github.com/stochastic-technologies/shortuuiduuid4().hex
ystr(uuid4())
?str(uuid4())
devuelve una representación de cadena del UUID con los guiones incluidos, mientras queuuid4().hex
devuelve "El UUID como una cadena hexadecimal de 32 caracteres"Si está utilizando Python 2.5 o posterior, el módulo uuid ya está incluido con la distribución estándar de Python.
Ex:
fuente
Copiado de: https://docs.python.org/2/library/uuid.html (Dado que los enlaces publicados no estaban activos y se siguen actualizando)
fuente
Utilizo GUID como claves aleatorias para operaciones de tipo de base de datos.
La forma hexadecimal, con guiones y caracteres adicionales me parece innecesariamente larga. Pero también me gusta que las cadenas que representan números hexadecimales sean muy seguras ya que no contienen caracteres que puedan causar problemas en algunas situaciones como '+', '=', etc.
En lugar de hexadecimal, uso una cadena base64 segura de url. Sin embargo, lo siguiente no se ajusta a ninguna especificación UUID / GUID (aparte de tener la cantidad de aleatoriedad requerida).
fuente
random.getrandbits(128).to_bytes(16, 'little')
o (para aleatorización criptográfica)os.urandom(16)
y obtener 128 bits aleatorios completos (UUIDv4 usa 6-7 bits en la información de la versión). O use solo 15 bytes (perdiendo 1-2 bits de aleatorio frente a UUIDv4) y evite la necesidad de recortar=
signos al tiempo que reduce el tamaño codificado a 20 bytes (de 24, recortado a 22), ya que cualquier múltiplo de 3 bytes codifica para#bytes / 3 * 4
base64 caracteres sin necesidad de relleno.return
declaración que espera un objeto similar a bytes. Se puede arreglar conreturn str(r_uuid).replace('=','')
.Si necesita pasar UUID para una clave primaria para su modelo o campo único, el siguiente código devuelve el objeto UUID:
Si necesita pasar UUID como parámetro para URL, puede hacer lo siguiente:
Si desea el valor hexadecimal para un UUID, puede hacer el siguiente:
fuente
Esta función es totalmente configurable y genera un uid único basado en el formato especificado
por ejemplo: - [8, 4, 4, 4, 12], este es el formato mencionado y generará el siguiente uuid
fuente
Respuesta 2019 (para Windows):
Si desea un UUID permanente que identifique una máquina exclusivamente en Windows, puede usar este truco: (Copiado de mi respuesta en https://stackoverflow.com/a/58416992/8874388 ).
Utiliza la API de Windows para obtener el UUID permanente de la computadora, luego procesa la cadena para asegurarse de que sea un UUID válido y, por último, devuelve un objeto Python ( https://docs.python.org/3/library/uuid.html ) que le brinda la comodidad formas de usar los datos (como un entero de 128 bits, una cadena hexadecimal, etc.).
¡Buena suerte!
PD: La llamada de subproceso probablemente podría reemplazarse con ctypes que llamen directamente al kernel de Windows / DLL. Pero para mis propósitos, esta función es todo lo que necesito. Hace una validación fuerte y produce resultados correctos.
fuente
Cheque esta publicación, me ayudó mucho. En resumen, la mejor opción para mí fue:
Porque necesitaba solo 4-6 caracteres aleatorios en lugar de un GUID voluminoso.
fuente