Python 3 へのマイグレーション

Perforce QAC(v3.1.0/2021.3)内部で使用している、Python 2 がPython 3にアップグレードされました。

これ以前のバージョンのPerforce QAC を使用して生成されたプロジェクトまたは、CCTはCIP生成スクリプトをアップグレードしないと正しく機能しません。無効なCIPスクリプトを使用したときの典型的な出力の例を以下に示します。

$ qacli analyze -f -P .
QAC が以下のコマンドを発しました:
C:\Users\Morpheus\AppData\Local\Perforce\QAC-2025.2\samples\sample_inspect_c-2021.2\prqa\configs\Initial\config\DATA\QAC_Generic_C\Script\QAC_Generic_C.py
 しかしコマンドは失敗しました。
 Exit Code: 1 (0x1)
C:\Users\Morpheus\AppData\Local\Perforce\QAC-2025.2\samples\sample_inspect_c-2021.2\src\inspect.c:qac:23:1:0
Progress(File-based Analysis): ................................... done

成功 0 、失敗 1 
詳細については以下のログを参照してください: 
C:\Users\Morpheus\AppData\Local\Perforce\QAC-2025.2\app\logs\QAC_20211122T13281583_17040.log

さらに、ログファイルに以下のスクリプトがある場合は、Python 2 スクリプトが使用されていることを示しています。

13:39:38.237   30932 QAF.debug: PRQA::QAAPI::QAUtils::startProcess: ===     import dircache
13:39:38.237   30932 QAF.debug: PRQA::QAAPI::QAUtils::startProcess: === ModuleNotFoundError: No module named 'dircache'

必要に応じて既存のプロジェクトをPython 3 で使用できるようアップグレードするかまたは、既存のCCTを Python 3 に対応するようアップグレードしてください(CCTをアップグレードすると以降のプロジェクトの生成に使用されます)。


プロジェクトのアップグレード


一番簡単にプロジェクトをアップグレードする方法は、次のセクション(「upgrade コマンド」)で説明されているようにqacli project upgrade コマンドを使用することです。

このコマンドは、プロジェクトのコンポーネントのバージョンをアップデートし、さらにCIP生成スクリプトをPython 3にアップグレードします。

CCTのアップグレード 


スタンドアロンのPythonスクリプト  update_to_py3.py を使用して手動でプロジェクトまたは、CCTをアップデートすることもできます。

このスクリプトは、作業中のプロジェクトまたは CCT が存在するディレクトリおよび、サブディレクトリ内のすべてのPythonファイルをアップデートします。 このスクリプトはさらに、qaf.py、cygpathHandler.py、gnu_gcc.py、msvc.py、QAC_Generic_C++.py、QAC_Generic_C.py などの変更されたファイルもPython 3にアップデートします。

カレントディレクトリ内のプロジェクトを変換するのに製品内のPythonを使用することもできます。例を示します。

C:\Perforce\QAC-2025.2\components\python-3.9.6\python.exe 
C:\Perforce\QAC-2025.2\scripts\update_to_py3.py my_old_project

置換 
C:\Temp\my_old_project\prqa\configs\Initial\config\DATA\core_qaf\qaf.py
置換
C:\Temp\my_old_project\prqa\configs\Initial\config\DATA\QAC_Generic_C\Script\QAC_Generic_C.py
プロジェクトまたは、CCTがアップグレードされると古いバージョンのPerforce QACでは使用できなくなります。
アップグレード処理手続きは、過去に出荷されたCIPスクリプトに見られる一般的な問題に対処します。ユーザによりCIP生成スクリプトが大幅に変更されている場合、アップグレード後に手動での調整が必要になる可能性があります。