Error "Module object has no attribute run" in mssql-conf setup using Python module

Este artículo le ayuda a resolver un error que se produce al intentar ejecutar mssql-conf la instalación mediante el módulo de Python. En este artículo también se describen los requisitos de Python para Microsoft SQL Server en Linux y se proporciona una solución alternativa si usa una versión temprana de Python al intentar configurar SQL Server en Linux.

Se aplica a: SQL Server 2019 en Linux

Síntomas

Al intentar ejecutar el mssql-conf programa de instalación después de instalar Microsoft SQL Server 2019, recibirá un mensaje de error "Module object has not attribute run" (No se ha ejecutado ningún atributo) si usa una versión de Python anterior a la 3.5.

Considere los casos siguientes:

  • Instale SQL Server en Linux siguiendo los pasos descritos en Guía de instalación para SQL Server en Linux.

  • Intenta ejecutar el /opt/mssql/bin/mssql-conf programa de instalación. Sin embargo, experimenta una dependencia de módulo:

testslesvm2:~ # /opt/mssql/bin/mssql-conf setup
Traceback (most recent call last):
  File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 17, in <module>
    import mssqlad
  File "/opt/mssql/lib/mssql-conf/mssqlad.py", line 15, in <module>
    import pyadutil
  File "/opt/mssql/lib/mssql-conf/pyadutil.py", line 6, in <module>
    import typing
ImportError: No module named 'typing'

También puede recibir el siguiente mensaje de error incluso después de corregir el problema de dependencia del módulo de escritura:

testslesvm2:~ # /opt/mssql/bin/mssql-conf setup
Warning: could not create log file for mssql-conf at /var/opt/mssql/log/mssql-conf/mssql-conf.log.
Traceback (most recent call last):
  File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 597, in <module>
    main()
  File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 593, in main
    processCommands()
  File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 310, in processCommands
    COMMAND_TABLE[args.which]()
  File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 93, in handleSetup
    mssqlconfhelper.setupSqlServer(eulaAccepted, noprompt=args.noprompt)
  File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 964, in setupSqlServer
    if not checkInstall():
  File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 934, in checkInstall
    return runScript(checkInstallScript, runAsRoot) == 0
  File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 915, in runScript
    process = subprocess.run([pathToScript], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
AttributeError: 'module' object has no attribute 'run'

Nota:

El mssql-conf error de configuración puede producirse en los sistemas en los que la plataforma compatible con el Microsoft SQL Server en Linux (RHEL, SLES, Ubuntu) incluye Python 3 u otra versión anterior a la 3.5. Para obtener más información sobre las plataformas compatibles con SQL Server en Linux, consulte Plataforma admitida.

Causa

El error se produce porque SQL Server 2019 y mssql-conf el código dependen de las funciones de Python 3.5+.

Solución alternativa

Tiene dos opciones para solucionar este problema:

  • Actualice Python 3 a 3.5 o una versión posterior. Establezca el sistema para que, al ejecutar el /usr/bin/env python3 -V comando, apunte a Python 3.5 o 3.5+.

    Nota: Hemos observado que algunas funciones del sistema que dependen de versiones de Python anteriores a la 3.5 dejan de funcionar después de esta actualización. Para evitar este problema, use la opción siguiente.

  • Cree un vínculo simbólico en la sesión que apunte Python 3 a Python 3.5 o 3.5+ y, a continuación, ejecute los mssql-conf comandos para configurar SQL Server. Para obtener más información, consulte la siguiente sección.

Siga estos pasos para crear un vínculo simbólico específico de la sesión en el que Python 3 apunta a Python 3.5 o una versión posterior y, a continuación, ejecute la mssql-conf instalación.

  1. Instale Python 3.5 o una versión posterior. En este ejemplo, instale Python 3.6:

    zypper in python36
    
  2. Instale SQL Server.

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-server-2019.repo
    sudo zypper --gpg-auto-import-keys refresh
    sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
    sudo zypper install -y mssql-server
    
  3. Cambie al usuario raíz, cree el vínculo simbólico en cualquier carpeta y agregue la ruta de acceso actual a $PATH. Por ejemplo, el vínculo simbólico /usr/bin/env python3 -V apunta a Python 3.6 en lugar de Python 3.4, como se muestra en el siguiente fragmento de código:

    $sudo su
    testslesvm2:~ #:> sudo ln -s /usr/bin/python3.6 python3
    testslesvm2:~ # > PATH=$(pwd):$PATH
    testslesvm2:~ # ll
    total 4
    -rw------- 1 root root 982 Feb  9 20:03 .bash_history
    drwx------ 2 root root 111 Jan 26 08:50 .gnupg
    drwx------ 2 root root  29 Feb  9 19:27 .ssh
    drwxr-xr-x 2 root root   6 Jun 27  2017 bin
    lrwxrwxrwx 1 root root  18 Feb  9 19:47 python3 -> /usr/bin/python3.6
    testslesvm2:~ # /usr/bin/env python3 -V
    Python 3.6.15
    
  4. Ejecute el programa de mssql-conf instalación o cualquier otro mssql-confcomando basado en:

    /opt/mssql/bin/mssql-conf setup
    
  5. Si quiere ejecutar el mssql-conf comando en el futuro para configurar SQL Server, cambie al usuario raíz y, a continuación, ejecute el PATH=$(pwd):$PATH comando para agregar la ruta de acceso actual a la variable de $PATH entorno. A continuación, ejecute el comando , como se muestra en el mssql-conf paso 4.

Consulte también

Dado que Python 3.4 ya ha alcanzado su estado de EOL (fin de vida) y ya no recibirá actualizaciones de seguridad, se recomienda usar una versión compatible y más reciente de Python. Para más información, consulte Python | endoflife.date.

Aviso de declinación de responsabilidades sobre la información de contacto de terceros

Microsoft proporciona información de contacto de otros proveedores para ayudarle a encontrar información adicional sobre este tema. Esta información de contacto puede cambiar sin previo aviso. Microsoft no garantiza la precisión de esta información de contacto de terceros.