使用 Python 模块的 mssql-conf 安装程序中的“模块对象没有属性运行”错误

本文可帮助你解决尝试使用 Python 模块运行 mssql-conf 安装程序时发生的错误。 本文还介绍了 Linux 上的 Microsoft SQL Server 的 Python 要求,如果在尝试配置Linux 上的 SQL Server时使用的是早期 Python 版本,请提供解决方法。

适用于:Linux 上的 SQL Server 2019

现象

安装 Microsoft SQL Server 2019 后尝试运行 mssql-conf 安装程序时,如果使用低于 3.5 的 Python 版本,将收到“模块对象没有属性运行”错误消息。

请考虑下列情形:

  • 按照Linux 上的 SQL Server安装指南中的步骤安装Linux 上的 SQL Server

  • 尝试运行 /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'

即使修复了“键入”模块依赖项问题,也可能收到以下错误消息:

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'

注意

Linux 上的 Microsoft SQL Servermssql-conf支持的平台(RHEL、SLES、Ubuntu)包含 Python 3 或其他版本低于 3.5 的系统上,可能会出现安装错误。 有关Linux 上的 SQL Server支持的平台的详细信息,请参阅受支持的平台

原因

发生此错误的原因是 SQL Server 2019 和 mssql-conf 代码依赖于 Python 3.5+ 函数。

解决方法

有两个选项可用于解决此问题:

  • 将 Python 3 升级到 3.5 或更高版本。 设置系统,以便在运行 /usr/bin/env python3 -V 命令时指向 Python 3.5 或 3.5+。

    注意: 我们观察到,某些依赖于早于 3.5 的 Python 版本的系统函数在此升级后停止工作。 若要避免此问题,请使用下一个选项。

  • 在会话中创建一个符号链接,该链接将 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

第三方联系人免责声明

Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。