Поделиться через


Ошибка "Объект модуля не выполняет атрибут" в настройке mssql-conf с помощью модуля Python

Эта статья поможет устранить ошибку, возникающую при попытке запустить mssql-conf программу установки с помощью модуля Python. В этой статье также описываются требования Python для Microsoft SQL Server на Linux и предоставляется обходное решение, если вы используете раннюю версию Python при попытке настроить SQL Server на Linux.

Область применения: SQL Server 2019 в Linux

Симптомы

При попытке выполнить mssql-conf настройку после установки Microsoft SQL Server 2019 вы получите сообщение об ошибке "объект модуля не имеет атрибутов запуска", если вы используете версию Python, которая раньше 3.5.

Рассмотрим следующие сценарии.

  • Чтобы установить SQL Server на Linux, выполните действия, описанные в руководстве по установке SQL Server на Linux.

  • Вы пытаетесь запустить /opt/mssql/bin/mssql-conf программу установки. Однако вы испытываете зависимость модуля:

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'

Вы также можете получить следующее сообщение об ошибке даже после устранения проблемы с зависимостью модуля typeing:

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'

Примечание.

Ошибка mssql-conf установки может возникать в системах, на которых поддерживается платформа Microsoft SQL Server на Linux (RHEL, SLES, Ubuntu) включает Python 3 или другую версию, которая выше 3.5. Дополнительные сведения о поддерживаемых SQL Server на Linux платформах см. в статье "Поддерживаемые платформы".

Причина

Ошибка возникает, так как SQL Server 2019 и mssql-conf код используют функции Python 3.5+.

Обходное решение

У вас есть два варианта решения этой проблемы:

  • Обновите Python 3 до версии 3.5 или более поздней. Установите систему таким образом, чтобы при выполнении /usr/bin/env python3 -V команды он указывает на Python 3.5 или 3.5+.

    Примечание. Мы заметили, что некоторые системные функции, использующие версии Python, которые раньше 3.5 перестают работать после этого обновления. Чтобы избежать этой проблемы, используйте следующий параметр.

  • Создайте символьную связь в сеансе, который указывает Python 3 на Python 3.5 или 3.5+, а затем выполните mssql-conf команды для настройки SQL Server. Для получения дополнительных сведений см. следующий раздел.

Выполните следующие действия, чтобы создать ссылку для конкретного сеанса, в которой Python 3 указывает на Python 3.5 или более позднюю версию, а затем запустите mssql-conf программу установки.

  1. Установите Python 3.5 или более позднюю версию. В этом примере установите Python 3.6:

    zypper in python36
    
  2. Установите 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. Переключитесь на корневого пользователя, создайте символьную связь в любой папке, а затем добавьте текущий путь к $PATH. Например, файл /usr/bin/env python3 -V указывает на Python 3.6 вместо Python 3.4, как показано в следующем фрагменте кода:

    $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. mssql-conf Запустите программу установки или другие mssql-confкоманды на основе:

    /opt/mssql/bin/mssql-conf setup
    
  5. Если вы хотите выполнить mssql-conf команду в будущем для настройки SQL Server, переключитесь на корневого пользователя и выполните PATH=$(pwd):$PATH команду, чтобы добавить текущий путь к переменной $PATH среды. Затем выполните команду, как показано на шаге mssql-conf 4.

См. также

Так как Python 3.4 уже достиг своего состояния EOL (окончания срока жизни) и больше не будет получать обновления системы безопасности, рекомендуется использовать поддерживаемую, более новую версию Python. Дополнительные сведения см. в статье Python | endoflife.date.

Заявление об отказе от ответственности за контактные данные сторонней организации

Корпорация Майкрософт предоставляет контактные данные сторонних производителей в целях получения дополнительных сведений по данной теме. Эти данные могут быть изменены без предварительного уведомления. Корпорация Майкрософт не гарантирует точность контактных данных сторонних производителей.