Partager via


Erreur « L’objet module n’a pas d’exécution d’attribut » dans le programme d’installation mssql-conf à l’aide du module Python

Cet article vous aide à résoudre une erreur qui se produit lorsque vous essayez d’exécuter mssql-conf le programme d’installation à l’aide du module Python. Cet article décrit également les exigences de Python pour Microsoft SQL Server sur Linux et fournit une solution de contournement si vous utilisez une version anticipée de Python lorsque vous essayez de configurer SQL Server sur Linux.

S’applique à : SQL Server 2019 sur Linux

Symptômes

Lorsque vous essayez d’exécuter mssql-conf le programme d’installation après avoir installé Microsoft SQL Server 2019, vous recevez un message d’erreur « Objet module n’a pas d’exécution d’attribut » si vous utilisez une version Python antérieure à la version 3.5.

Examinez les scénarios suivants :

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'

Vous pouvez également recevoir le message d’erreur suivant, même après avoir résolu le problème de dépendance de module « saisie » :

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'

Note

L’erreur mssql-conf d’installation peut se produire sur les systèmes sur lesquels la plateforme Microsoft SQL Server sur Linux prise en charge (RHEL, SLES, Ubuntu) inclut Python 3 ou une autre version antérieure à 3.5. Pour plus d’informations sur les plateformes prises en charge par SQL Server sur Linux, consultez Plateforme prise en charge.

Cause

L’erreur se produit car SQL Server 2019 et mssql-conf le code s’appuient sur les fonctions Python 3.5+ .

Solution de contournement

Vous avez deux options pour contourner ce problème :

  • Mettez à niveau Python 3 vers la version 3.5 ou ultérieure. Définissez le système de sorte que lorsque vous exécutez la /usr/bin/env python3 -V commande, il pointe vers Python 3.5 ou 3.5+.

    Remarque : Nous avons observé que certaines fonctions système qui s’appuient sur les versions de Python antérieures à la version 3.5 arrêtent de fonctionner après cette mise à niveau. Pour éviter ce problème, utilisez l’option suivante.

  • Créez un lien symbolique dans votre session qui pointe Python 3 vers Python 3.5 ou 3.5+, puis exécutez les mssql-conf commandes pour configurer SQL Server. Pour plus d'informations, voir la section suivante.

Suivez ces étapes pour créer un lien symbolique spécifique à une session dans lequel Python 3 pointe vers Python 3.5 ou une version ultérieure, puis exécutez la mssql-conf configuration.

  1. Installez Python 3.5 ou une version ultérieure. Dans cet exemple, installez Python 3.6 :

    zypper in python36
    
  2. Installez 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. Basculez vers l’utilisateur racine, créez le lien symbolique dans n’importe quel dossier, puis ajoutez le chemin d’accès actuel à $PATH. Par exemple, le lien symbolique /usr/bin/env python3 -V pointe vers Python 3.6 au lieu de Python 3.4, comme illustré dans l’extrait de code suivant :

    $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. Exécutez le programme d’installation mssql-conf ou toute autre mssql-confcommande basée sur les commandes suivantes :

    /opt/mssql/bin/mssql-conf setup
    
  5. Si vous souhaitez exécuter la mssql-conf commande ultérieurement pour configurer SQL Server, basculez vers l’utilisateur racine, puis exécutez la PATH=$(pwd):$PATH commande pour ajouter le chemin actuel à la $PATH variable d’environnement. Exécutez ensuite la commande, comme indiqué à l’étape mssql-conf 4.

Voir aussi

Étant donné que Python 3.4 a déjà atteint son état EOL (fin de vie) et ne recevra plus de mises à jour de sécurité, nous vous recommandons d’utiliser une version plus récente et prise en charge de Python. Pour plus d’informations, consultez Python | endoflife.date.

Exclusion de responsabilité sur les coordonnées externes

Microsoft fournit des informations de contacts externes afin de vous aider à obtenir un support technique sur ce sujet. Ces informations de contact peuvent changer sans préavis. Microsoft ne garantit pas l’exactitude des informations concernant les sociétés externes.