この記事は、Python モジュールを使用してセットアップ mssql-conf 実行しようとしたときに発生するエラーを解決するのに役立ちます。 また、この記事では、Linux 上の Microsoft SQL Server の Python 要件について説明し、Linux 上の SQL Server を構成しようとしたときに初期の Python バージョンを使用している場合の回避策についても説明します。
適用対象: SQL Server 2019 on Linux
現象
Microsoft SQL Server 2019 をインストールした後に mssql-conf セットアップを実行しようとすると、3.5 より前の Python バージョンを使用している場合は、"module object has no attribute run" というエラー メッセージが表示されます。
以下のようなシナリオが考えられます。
SQL Server on Linux をインストールするには、「sql Server on 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'
また、"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'
Note
mssql-confセットアップ エラーは、Microsoft SQL Server on Linux でサポートされているプラットフォーム (RHEL、SLES、Ubuntu) に Python 3 または 3.5 より前の別のバージョンが含まれているシステムで発生する可能性があります。 Linux でサポートされているプラットフォーム上の SQL Server の詳細については、「 Supported platform」を参照してください。
原因
このエラーは、SQL Server 2019 と mssql-conf コードが Python 3.5 以降の関数に依存しているために発生します。
回避策
この問題を回避するには、次の 2 つの方法があります。
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 が Python 3.5 以降のバージョンを指すセッション固有のシンボリック リンクを作成し、 mssql-conf セットアップを実行します。
Python 3.5 以降のバージョンをインストールします。 この例では、Python 3.6 をインストールします。
zypper in python36SQL 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ルート ユーザーに切り替え、任意のフォルダーにシンボリック リンクを作成し、現在のパスを
$PATHに追加します。 たとえば、次のコード スニペットに示すように、 /usr/bin/env python3 -V シンボリック リンクは Python 3.4 ではなく Python 3.6 を指します。$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.15mssql-confセットアップまたはその他のmssql-confベースのコマンドを実行します。/opt/mssql/bin/mssql-conf setup今後、
mssql-confコマンドを実行して SQL Server を構成する場合は、ルート ユーザーに切り替えて、PATH=$(pwd):$PATHコマンドを実行して、現在のパスを$PATH環境変数に追加します。 次に、手順 4 に示すように、mssql-confコマンドを実行します。
関連項目
Python 3.4 は既に EOL (有効期限) の状態に達しており、セキュリティ更新プログラムを受け取らなくなったため、サポートされている新しいバージョンの Python を使用することをお勧めします。 詳細については、「 Python | endoflife.dateを参照してください。
サードパーティのお問い合わせ窓口に関する免責事項
サードパーティのお問い合わせ窓口に関する情報は、ユーザーの便宜のために提供されているものであり、 この連絡先情報は、予告なしに変更される可能性があります。 マイクロソフトは、掲載されている情報に対して、いかなる責任も負わないものとします。