(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023128865
(43)【公開日】2023-09-14
(54)【発明の名称】インストール支援プログラム、インストール支援装置、及びインストール支援方法
(51)【国際特許分類】
G06F 8/61 20180101AFI20230907BHJP
【FI】
G06F8/61
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022033512
(22)【出願日】2022-03-04
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(72)【発明者】
【氏名】ルアンワン シェード
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AA32
5B376AD24
(57)【要約】
【課題】複数のライブラリのインストール処理を高速化する。
【解決手段】コンピュータは、インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加し、識別情報が追加される度に、複数の判定対象ライブラリの間の適合性を判定する判定処理を行う。複数の判定対象ライブラリは、判定対象リストに含まれる識別情報が示すライブラリと、判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む。コンピュータは、判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、追加された識別情報を判定対象リストから削除する。コンピュータは、不適合が検出されなかった場合、判定対象リストに含まれる識別情報と依存ライブラリの識別情報とを含む、ライブラリリストを生成する。コンピュータは、複数のライブラリに対する判定処理が終了した後、ライブラリリストを出力する。
【選択図】
図3
【特許請求の範囲】
【請求項1】
インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加し、
前記複数のライブラリ各々の識別情報が前記判定対象リストに追加される度に、前記判定対象リストに含まれる識別情報が示すライブラリと、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む、複数の判定対象ライブラリの間の適合性を判定する判定処理を行い、
前記判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、前記追加された識別情報を前記判定対象リストから削除し、
前記判定処理において、前記追加された識別情報が示すライブラリに関する不適合が検出されなかった場合、前記判定対象リストに含まれる識別情報と前記依存ライブラリの識別情報とを含む、ライブラリリストを生成し、
前記複数のライブラリに対する前記判定処理が終了した後、前記ライブラリリストを出力する、
処理をコンピュータに実行させるためのインストール支援プログラム。
【請求項2】
前記判定処理は、前記複数の判定対象ライブラリのうち、前記追加された識別情報が示すライブラリ、又は前記追加された識別情報が示すライブラリが依存する依存ライブラリについて、他の判定対象ライブラリと適合するバージョンが存在しない場合、前記追加された識別情報が示すライブラリに関する不適合が検出されたと判定する処理を含むことを特徴とする請求項1記載のインストール支援プログラム。
【請求項3】
前記ライブラリリストに含まれる識別情報が示すライブラリをインストールする処理を、前記コンピュータにさらに実行させることを特徴とする請求項1又は2記載のインストール支援プログラム。
【請求項4】
前記判定処理は、前記判定対象リストに含まれる識別情報と、前記判定対象リストに含まれる識別情報が示すライブラリのバージョンを示すバージョン情報と、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリの識別情報と、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリのバージョンを示すバージョン情報とを含む、要件情報を生成する処理を含み、
前記要件情報に含まれるバージョン情報が示すバージョンは、互いに適合しており、
前記ライブラリをインストールする処理は、前記要件情報を用いて、前記ライブラリリストに含まれる識別情報が示すライブラリをインストールする処理を含むことを特徴とする請求項3記載のインストール支援プログラム。
【請求項5】
インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加し、前記複数のライブラリ各々の識別情報が前記判定対象リストに追加される度に、前記判定対象リストに含まれる識別情報が示すライブラリと、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む、複数の判定対象ライブラリの間の適合性を判定する判定処理を行う判定部と、
前記判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、前記追加された識別情報を前記判定対象リストから削除し、前記追加された識別情報が示すライブラリに関する不適合が検出されなかった場合、前記判定対象リストに含まれる識別情報と前記依存ライブラリの識別情報とを含む、ライブラリリストを生成する生成部と、
前記複数のライブラリに対する前記判定処理が終了した後、前記ライブラリリストを出力する出力部と、
を備えることを特徴とするインストール支援装置。
【請求項6】
インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加し、
前記複数のライブラリ各々の識別情報が前記判定対象リストに追加される度に、前記判定対象リストに含まれる識別情報が示すライブラリと、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む、複数の判定対象ライブラリの間の適合性を判定する判定処理を行い、
前記判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、前記追加された識別情報を前記判定対象リストから削除し、
前記判定処理において、前記追加された識別情報が示すライブラリに関する不適合が検出されなかった場合、前記判定対象リストに含まれる識別情報と前記依存ライブラリの識別情報とを含む、ライブラリリストを生成し、
前記複数のライブラリに対する前記判定処理が終了した後、前記ライブラリリストを出力する、
処理をコンピュータが実行することを特徴とするインストール支援方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、インストール支援技術に関する。
【背景技術】
【0002】
PyPI(Python Package Index)からパイソン(Python)のライブラリを情報処理装置(コンピュータ)にインストールする際、pip(Pip Installs Packages)が用いられる。ライブラリは、他のプログラムから呼び出して利用できるように部品化された複数のプログラムを含む。ライブラリに含まれる各プログラムは、特定の機能を有する。
【0003】
PyPIは、パイソンのライブラリの生態系に対応するリポジトリであり、pipは、PyPI等からソフトウェアのパッケージをインストールするパッケージインストーラである。ユーザは、ライブラリ名、GitHubリンク、又はライブラリ名のリストを含む要件ファイル(requirement file)をpipに与えることで、ライブラリをインストールすることができる。
【0004】
ソフトウェアのインストールに関連して、コンテナのコンプライアンスを認識するランタイム生成を容易にするシステムが知られている(例えば、特許文献1を参照)。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
pipを用いて複数のライブラリを一度にインストールする場合、最初に、それらのライブラリの最新バージョンがダウンロードされる。このとき、ライブラリ間の依存関係によってバージョン競合が発生することがある。
【0007】
例えば、インストール対象のライブラリA及びライブラリBが、ライブラリCのそれぞれ異なるバージョンに依存する場合にバージョン競合が発生する。ライブラリXがライブラリYに依存するということは、ライブラリXのビルド又は実行のためにライブラリYが利用されることを意味する。以下では、ライブラリYのような依存先のライブラリを、依存ライブラリと記載することがある。
【0008】
ライブラリの最新バージョンの間でバージョン競合が発生した場合、pipは、各ライブラリのより古いバージョンをダウンロードする。そして、pipは、より古いバージョンと他のライブラリのバージョンとの適合性をチェックし、ベストエフォート方式でバージョン競合の解決を試みる。ライブラリ間でバージョン競合が発生しないバージョンの組み合わせが見つかった場合、それらのバージョンは互いに適合している。この場合、バージョン競合が解決される。
【0009】
しかしながら、インストール対象のライブラリの個数が増加すると、より多くのバージョン競合が発生する可能性が高くなる。このため、すべてのライブラリの適合するバージョンの組み合わせを決定するために、より多くの計算資源が消費され、より長い時間がかかる。例えば、数百個のライブラリを含む要件ファイルが与えられた場合、バージョン競合を解決するために数時間かかることがある。また、解決されないバージョン競合は無視されるため、ランタイムエラーが発生することもある。
【0010】
なお、かかる問題は、パイソンのライブラリをインストールする場合に限らず、様々なプログラミング言語で記述されたライブラリをインストールする場合において生ずるものである。
【0011】
1つの側面において、本発明は、複数のライブラリのインストール処理を高速化することを目的とする。
【課題を解決するための手段】
【0012】
1つの案では、インストール支援プログラムは、以下の処理をコンピュータに実行させる。
【0013】
コンピュータは、インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加する。コンピュータは、複数のライブラリ各々の識別情報が判定対象リストに追加される度に、複数の判定対象ライブラリの間の適合性を判定する判定処理を行う。複数の判定対象ライブラリは、判定対象リストに含まれる識別情報が示すライブラリと、判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む。
【0014】
コンピュータは、判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、追加された識別情報を判定対象リストから削除する。コンピュータは、判定処理において、追加された識別情報が示すライブラリに関する不適合が検出されなかった場合、判定対象リストに含まれる識別情報と依存ライブラリの識別情報とを含む、ライブラリリストを生成する。
【0015】
コンピュータは、複数のライブラリに対する判定処理が終了した後、ライブラリリストを出力する。
【発明の効果】
【0016】
1つの側面によれば、複数のライブラリのインストール処理を高速化することができる。
【図面の簡単な説明】
【0017】
【
図1】インストール支援装置の機能的構成図である。
【
図5】インストール支援処理のフローチャートである。
【
図7】第1のrequirements.inを示す図である。
【
図8】第1のrequirements.txtを示す図である。
【
図9】第1の追加ライブラリリストを示す図である。
【
図10】第2のrequirements.inを示す図である。
【
図12】第3のrequirements.inを示す図である。
【
図13】第2のrequirements.txtを示す図である。
【
図14】第2の追加ライブラリリストを示す図である。
【
図16】情報処理装置のハードウェア構成図である。
【発明を実施するための形態】
【0018】
以下、図面を参照しながら、実施形態を詳細に説明する。
【0019】
図1は、実施形態のインストール支援装置の機能的構成例を示している。
図1のインストール支援装置101は、判定部111、生成部112、及び出力部113を含む。判定部111は、インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加する。そして、判定部111は、複数のライブラリ各々の識別情報が判定対象リストに追加される度に、複数の判定対象ライブラリの間の適合性を判定する判定処理を行う。
【0020】
複数の判定対象ライブラリは、判定対象リストに含まれる識別情報が示すライブラリと、判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む。
【0021】
判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、生成部112は、追加された識別情報を判定対象リストから削除する。判定処理において、追加された識別情報が示すライブラリに関する不適合が検出されなかった場合、生成部112は、判定対象リストに含まれる識別情報と依存ライブラリの識別情報とを含む、ライブラリリストを生成する。
【0022】
出力部113は、複数のライブラリに対する判定処理が終了した後、ライブラリリストを出力する。
【0023】
図1のインストール支援装置101によれば、複数のライブラリのインストール処理を高速化することができる。
【0024】
図2は、
図1のインストール支援装置101を含むインストールシステムの構成例を示している。
図2のインストールシステムは、情報処理装置201及びライブラリサーバ202を含む。情報処理装置201は、
図1のインストール支援装置101に対応する。
【0025】
情報処理装置201は、通信ネットワーク203を介して、ライブラリサーバ202と通信する。通信ネットワーク203は、例えば、WAN(Wide Area Network)又はLAN(Local Area Network)である。
【0026】
ライブラリサーバ202は、複数のライブラリを記憶する。情報処理装置201は、インストール対象のライブラリを要求するリクエストを、ライブラリサーバ202へ送信し、ライブラリサーバ202からライブラリを受信して、情報処理装置201内にインストールする。インストール対象がパイソンのライブラリである場合、ライブラリサーバ202が記憶する複数のライブラリは、PyPIに対応する。
【0027】
図3は、
図2の情報処理装置201の機能的構成例を示している。
図3の情報処理装置201は、追加部311、実行部312、生成部313、インストール部314、表示部315、通信部316、及び記憶部317を含む。追加部311及び実行部312は、
図1の判定部111に対応し、生成部313は、
図1の生成部112に対応し、表示部315又は通信部316は、
図1の出力部113に対応する。
【0028】
記憶部317は、初期ライブラリリスト321、判定対象リスト322、要件ファイル323、実行ログ324、及び追加ライブラリリスト325を記憶する。
【0029】
初期ライブラリリスト321は、ユーザによって指定された、インストール対象の複数のライブラリの名称を含む。ライブラリの名称は、ライブラリの識別情報に対応する。以下では、ライブラリの名称を、ライブラリ名と記載することがある。
【0030】
判定対象リスト322には、追加部311によって、判定対象のライブラリのライブラリ名が追加される。要件ファイル323及び実行ログ324は、実行部312によって生成される。
【0031】
追加ライブラリリスト325には、生成部313によって、要件ファイル323に含まれるライブラリ名が追加される。追加ライブラリリスト325は、判定対象リストに含まれる識別情報と依存ライブラリの識別情報とを含むライブラリリストに対応する。
【0032】
インストール対象がパイソンのライブラリである場合、判定対象リスト322は、例えば、pip-compileの入力ファイルであるrequirements.inに対応し、要件ファイル323は、例えば、pip-compileの出力ファイルであるrequirements.txtに対応する。
【0033】
pip-compileは、pipのコマンドである。pip-compileは、入力ファイルであるsetup.py又はrequirements.inによって指定されたライブラリの依存関係から、requirements.txtを生成する。requirements.txtは、requirements.inに含まれる各ライブラリ名と、そのライブラリが依存する依存ライブラリのライブラリ名とを含む。
【0034】
依存ライブラリには、直接依存の依存ライブラリと推移的依存の依存ライブラリとが含まれる。直接依存は、あるライブラリが依存ライブラリに直接依存することを表す。推移的依存は、あるライブラリが他のライブラリを介して間接的に依存ライブラリに依存することを表す。
【0035】
pip-compileは、requirements.inに含まれる各ライブラリ名が示すライブラリと、そのライブラリの依存ライブラリのうち、何れかのライブラリについて、他のライブラリと適合するバージョンが検出されなかった場合、エラーメッセージを出力する。エラーメッセージが出力された場合、pip-compileの実行が中断される。この場合、通常であれば、手作業でバージョン競合の解決が試みられる。
【0036】
ライブラリ開発者は、開発したライブラリに対する要件を公開するために、pip-compileを利用することがある。ただし、pip-compileは、ライブラリをインストールする機能は持っていない。
【0037】
図4は、判定対象リスト322の例を示している。
図4の判定対象リスト322は、requirements.inであり、scikit-learn及びpandasの2つのライブラリ名を含んでいる。
【0038】
追加部311は、初期ライブラリリスト321に含まれるライブラリ名を、1つずつ判定対象リスト322に追加する。実行部312は、ライブラリ名が判定対象リスト322に追加される度に、複数の判定対象ライブラリの間の適合性を判定する判定処理を行って、要件ファイル323及び実行ログ324を生成する。そして、実行部312は、要件ファイル323及び実行ログ324を記憶部317に格納する。
【0039】
複数の判定対象ライブラリは、判定対象リスト322に含まれる各ライブラリ名が示すライブラリと、そのライブラリが依存する依存ライブラリとを含む。要件ファイル323は、判定対象リスト322に含まれる各ライブラリ名と、そのライブラリが依存する依存ライブラリのライブラリ名と、それらのライブラリのバージョンを示すバージョン情報とを含む。要件ファイル323に含まれるバージョン情報が示すバージョンは、互いに適合している。要件ファイル323は、要件情報の一例である。
【0040】
判定対象リスト322がrequirements.inである場合、実行部312は、pip-compileを実行することで判定処理を行い、判定対象リスト322からrequirements.txt及び実行ログ324を生成する。この場合、生成されたrequirements.txtは、要件ファイル323に対応する。
【0041】
複数の判定対象ライブラリのうち、判定対象リスト322に追加されたライブラリ名が示すライブラリ、又はそのライブラリの依存ライブラリについて、他の判定対象ライブラリと適合するバージョンが存在しないこともあり得る。この場合、実行部312は、追加されたライブラリ名が示すライブラリに関する不適合が検出されたと判定し、エラーメッセージを含む実行ログ324を生成する。
【0042】
実行部312は、判定処理において、すべての判定対象ライブラリの適合するバージョンの組み合わせが存在するか否かをチェックすることで、追加されたライブラリ名が示すライブラリに関する不適合を検出することができる。
【0043】
すべての判定対象ライブラリについて、他の判定対象ライブラリと適合するバージョンが存在する場合、実行部312は、追加されたライブラリ名が示すライブラリに関する不適合が検出されなかったと判定する。そして、実行部312は、エラーメッセージを含まない実行ログ324を生成する。
【0044】
実行ログ324がエラーメッセージを含んでいない場合、生成部313は、要件ファイル323に含まれるライブラリ名のうち、追加ライブラリリスト325に含まれていないライブラリ名を、追加ライブラリリスト325に追加する。これにより、追加ライブラリリスト325に含まれるすべてのライブラリ名と、要件ファイル323に含まれるすべてのライブラリ名とが一致する。
【0045】
一方、実行ログ324がエラーメッセージを含んでいる場合、生成部313は、追加されたライブラリ名を判定対象リスト322から削除する。この場合、削除されたライブラリ名は、追加ライブラリリスト325に追加されない。
【0046】
初期ライブラリリスト321に含まれるすべてのライブラリ名が判定対象リスト322に追加され、最後に追加されたライブラリ名に対する判定処理が終了した場合、表示部315は、追加ライブラリリスト325を画面上に表示する。これにより、ユーザは、初期ライブラリリスト321に含まれるライブラリ名が示すライブラリの依存ライブラリを確認することができるとともに、初期ライブラリリスト321から削除されたライブラリ名の有無を確認することができる。
【0047】
通信部316は、ライブラリサーバ202と通信する。インストール部314は、最終的に生成された追加ライブラリリスト325に含まれる複数のライブラリ名それぞれが示すライブラリを、インストール対象に決定する。そして、インストール部314は、インストール対象のライブラリを要求するリクエストを、通信部316を介して、ライブラリサーバ202へ送信する。
【0048】
通信部316は、ライブラリサーバ202からインストール対象のライブラリを受信し、インストール部314は、受信したライブラリをインストールする。
【0049】
要件ファイル323がrequirements.txtである場合、インストール部314は、要件ファイル323を入力ファイルとして用いて、pipを実行することで、インストール対象のライブラリをライブラリサーバ202からダウンロードする。要件ファイル323に含まれるすべてのライブラリに対して、互いに適合するバージョンが指定されているため、pipによるインストールが成功する確率が高くなる。
【0050】
表示部315が追加ライブラリリスト325を表示する代わりに、通信部316が追加ライブラリリスト325を不図示のユーザ端末装置へ送信してもよい。この場合、ユーザ端末装置は、受信した追加ライブラリリスト325を画面上に表示する。
【0051】
図5は、
図3の情報処理装置201が行うインストール支援処理の例を示すフローチャートである。まず、追加部311は、初期ライブラリリスト321から何れかのライブラリ名を選択し(ステップ501)、選択されたライブラリ名が追加ライブラリリスト325に含まれているか否かをチェックする(ステップ502)。
【0052】
選択されたライブラリ名が追加ライブラリリスト325に含まれていない場合(ステップ502,NO)、追加部311は、そのライブラリ名を、判定対象リスト322であるrequirements.inに追加する(ステップ503)。
【0053】
次に、実行部312は、requirements.inを入力ファイルとしてpip-compileを実行することで、判定処理を行う(ステップ504)。そして、実行部312は、要件ファイル323であるrequirements.txtと、実行ログ324とを生成する。
【0054】
次に、生成部313は、実行ログ324がエラーメッセージを含んでいるかをチェックする(ステップ505)。実行ログ324がエラーメッセージを含んでいない場合(ステップ505,NO)、生成部313は、追加ライブラリリスト325を更新する(ステップ506)。ステップ506において、生成部313は、要件ファイル323に含まれるライブラリ名のうち、追加ライブラリリスト325に含まれていないライブラリ名を、追加ライブラリリスト325に追加する。
【0055】
一方、実行ログ324がエラーメッセージを含んでいる場合(ステップ505,YES)、生成部313は、ステップ503において判定対象リスト322に追加されたライブラリ名を、判定対象リスト322から削除する(ステップ507)。
【0056】
次に、追加部311は、初期ライブラリリスト321に含まれるすべてのライブラリ名が選択されたか否かをチェックする(ステップ508)。未選択のライブラリ名が残っている場合(ステップ508,NO)、情報処理装置201は、次のライブラリ名について、ステップ501以降の処理を繰り返す。
【0057】
選択されたライブラリ名が追加ライブラリリスト325に含まれている場合(ステップ502,YES)、情報処理装置201は、ステップ508以降の処理を行う。
【0058】
すべてのライブラリ名が選択された場合(ステップ508,YES)、表示部315は、追加ライブラリリスト325を画面上に表示する(ステップ509)。ユーザは、表示された追加ライブラリリスト325を確認して、問題がなければ、情報処理装置201にインストール指示を入力する。
【0059】
インストール部314は、入力されたインストール指示に従い、要件ファイル323を入力ファイルとして用いて、pipを実行する。これにより、インストール部314は、追加ライブラリリスト325に含まれる複数のライブラリ名それぞれが示すライブラリを、ライブラリサーバ202からダウンロードして、インストールする(ステップ510)。
【0060】
図5のインストール支援処理によれば、判定処理においてエラーが発生した場合、エラーの原因となったライブラリをrequirements.inから削除して処理が継続されるため、ライブラリ間の適合性の検証を中断なく行うことができる。
【0061】
次に、
図6から
図14までを参照しながら、インストール支援処理の具体例について説明する。
【0062】
図6は、初期ライブラリリスト321の例を示している。
図6の初期ライブラリリスト321は、scikit-learn、skeras、及びpandasの3つのライブラリ名を含む。まず、追加部311は、
図6の初期ライブラリリスト321からscikit-learnを選択して、requirements.inに追加する。
【0063】
図7は、第1のrequirements.inの例を示している。
図7のrequirements.inは、選択されたscikit-learnを含む。実行部312は、
図7のrequirements.inを用いてpip-compileを実行することで、requirements.txt及び実行ログ324を生成する。
【0064】
図8は、第1のrequirements.txtの例を示している。
図8のrequirements.txtは、
図7のrequirements.inから生成され、joblib、numpy、scikit-learn、scipy、及びthreadpoolctlの5つのライブラリ名と、それらのライブラリのバージョン情報とを含む。
【0065】
scikit-learnは、requirements.inに含まれるライブラリである。joblib、scipy、及びthreadpoolctlは、scikit-learnが依存する直接依存の依存ライブラリである。numpyは、scikit-learn及びscipyが依存する直接依存の依存ライブラリである。したがって、numpyは、scikit-learnがscipyを介して依存する推移的依存の依存ライブラリでもある。
【0066】
joblibのバージョンは“1.0.1”であり、numpyのバージョンは“1.21.2”であり、scikit-learnのバージョンは“1.0”である。scipyのバージョンは“1.7.1”であり、threadpoolctlのバージョンは“2.2.0”である。
【0067】
図7のrequirements.inから生成される実行ログ324は、
図8のrequirements.txtと同様の情報を含み、エラーメッセージを含んでいない。そこで、生成部313は、
図8のrequirements.txtに含まれるライブラリ名を、追加ライブラリリスト325に追加する。
【0068】
図9は、第1の追加ライブラリリスト325の例を示している。
図9の追加ライブラリリスト325は、
図8のrequirements.txtに含まれる5つのライブラリ名を含む。
【0069】
次に、追加部311は、
図6の初期ライブラリリスト321からskerasを選択して、
図7のrequirements.inに追加する。
【0070】
図10は、第2のrequirements.inの例を示している。
図10のrequirements.inは、選択されたskerasを含む。実行部312は、
図10のrequirements.inを用いてpip-compileを実行することで、requirements.txt及び実行ログ324を生成する。このとき生成されるrequirements.txtは、
図8のrequirements.txtと同様の情報を含む。
【0071】
図11は、実行ログ324の例を示している。
図11の実行ログ324は、requirements.inに追加されたskerasについて、他の判定対象ライブラリと適合するバージョンが存在しないことを示すエラーメッセージを含む。
【0072】
この場合、実行ログ324がエラーメッセージを含んでいるため、生成部313は、追加されたskerasを、
図10のrequirements.inから削除する。これにより、requirements.inは
図7の状態に戻り、追加ライブラリリスト325は更新されない。また、生成されたrequirements.txtには、追加されたskerasとその依存ライブラリの情報が含まれていない。
【0073】
次に、追加部311は、
図6の初期ライブラリリスト321からpandasを選択して、
図7のrequirements.inに追加する。
【0074】
図12は、第3のrequirements.inの例を示している。
図12のrequirements.inは、選択されたpandasを含む。実行部312は、
図12のrequirements.inを用いてpip-compileを実行することで、requirements.txt及び実行ログ324を生成する。
【0075】
図13は、第2のrequirements.txtの例を示している。
図13のrequirements.txtは、
図12のrequirements.inから生成される。
図13のrequirements.txtは、joblib、numpy、pandas、python-dateutil、pytz、scikit-learn、scipy、six、及びthreadpoolctlの9つのライブラリ名を含む。
図13のrequirements.txtは、さらに、それらのライブラリのバージョン情報を含む。
【0076】
scikit-learn及びpandasは、requirements.inに含まれるライブラリである。joblib、scipy、及びthreadpoolctlは、scikit-learnが依存する直接依存の依存ライブラリである。numpyは、pandas、scikit-learn、及びscipyが依存する直接依存の依存ライブラリである。したがって、numpyは、scikit-learnがscipyを介して依存する推移的依存の依存ライブラリでもある。
【0077】
python-dateutil及びpytzは、pandasが依存する直接依存の依存ライブラリである。sixは、python-dateutilが依存する直接依存の依存ライブラリである。したがって、sixは、pandasがpython-dateutilを介して依存する推移的依存の依存ライブラリでもある。
【0078】
joblibのバージョンは“1.0.1”であり、numpyのバージョンは“1.21.2”であり、pandasのバージョンは“1.3.3”である。python-dateutilのバージョンは“2.8.2”であり、pytzのバージョンは“2021.1”である。scikit-learnのバージョンは“1.0”であり、scipyのバージョンは“1.7.1”である。sixのバージョンは“1.16.0”であり、threadpoolctlのバージョンは“2.2.0”である。
【0079】
図12のrequirements.inから生成される実行ログ324は、
図13のrequirements.txtと同様の情報を含み、エラーメッセージを含んでいない。そこで、生成部313は、
図13のrequirements.txtに含まれるライブラリ名のうち、
図9の追加ライブラリリスト325に含まれていないライブラリ名を、その追加ライブラリリスト325に追加する。
【0080】
図14は、第2の追加ライブラリリスト325の例を示している。
図14の追加ライブラリリスト325は、
図13のrequirements.txtに含まれる9つのライブラリ名を含む。この時点で、
図6の初期ライブラリリスト321に含まれるすべてのライブラリ名が選択されたため、表示部315は、
図14の追加ライブラリリスト325を画面上に表示する。
【0081】
これにより、ユーザは、初期ライブラリリスト321に含まれていなかったjoblib、numpy、python-dateutil、pytz、scipy、six、及びthreadpoolctlが依存ライブラリであることを確認することができる。さらに、ユーザは、初期ライブラリリスト321からskerasが削除されたことを確認することができる。
【0082】
図15は、
図5のインストール支援処理を実行するための擬似コードの例を示している。文1501の“library list”は、初期ライブラリリスト321に対応し、文1502の“added libraries”は、追加ライブラリリスト325に対応し、文1503の“temporary file”は、requirements.inに対応する。文1504の“execution log”及び“requirements file”は、実行ログ324及びrequirements.txtにそれぞれ対応する。
【0083】
文1504は、ステップ504の処理に対応し、文1505は、ステップ507の処理に対応し、文1506は、ステップ506の処理に対応する。
【0084】
図3の情報処理装置201によれば、インストール対象のライブラリをインストールする前に、pip-compileを用いてライブラリのバージョン間の適合性が検証される。このため、ユーザは、適合性が検証されたバージョン情報を含む要件ファイルを用いて、pipによりライブラリをインストールすることができる。
【0085】
ライブラリのバージョン間の適合性が検証済みであるため、pipの実行中における適合性検証は短時間で終了し、インストール時間が短縮される。したがって、複数のライブラリのインストール処理が高速化され、ユーザの待ち時間が減少する。
【0086】
実験結果によれば、要件ファイルに175個のライブラリが含まれている場合、従来のインストール処理にかかる時間は、2時間以上である。これに対して、
図3の情報処理装置201では、要件ファイルの生成にかかる時間は17分であり、生成された要件ファイルを用いたpipによるインストール処理にかかる時間は7分である。したがって、要件ファイルの生成及びpipの実行を併せても、24分しかかからない。この場合、2時間以上のインストール時間が30分未満に短縮される。
【0087】
図1のインストール支援装置101の構成は一例に過ぎず、インストール支援装置101の用途又は条件に応じて一部の構成要素を省略又は変更してもよい。
図2のインストールシステムの構成は一例に過ぎず、インストールシステムの用途又は条件に応じて一部の構成要素を省略又は変更してもよい。
【0088】
図3の情報処理装置201の構成は一例に過ぎず、インストールシステムの用途又は条件に応じて一部の構成要素を省略又は変更してもよい。例えば、インストール処理が外部の装置により行われる場合は、インストール部314を省略することができる。
【0089】
図5のフローチャートは一例に過ぎず、情報処理装置201の構成又は条件に応じて、一部の処理を省略又は変更してもよい。例えば、インストール処理が外部の装置により行われる場合は、ステップ510の処理を省略することができる。
【0090】
図6に示した初期ライブラリリスト321は一例に過ぎず、初期ライブラリリスト321は、インストール対象のライブラリに応じて変化する。インストール対象のライブラリは、JavaScript(登録商標)等の他のプログラミング言語で記述されたライブラリであってもよい。
【0091】
図4、
図7、
図10、及び
図12に示したrequirements.inは一例に過ぎず、requirements.inは、初期ライブラリリスト321に応じて変化する。
図8及び
図13に示したrequirements.txtと
図9及び
図14に示した追加ライブラリリスト325は一例に過ぎず、requirements.txt及び追加ライブラリリスト325は、requirements.inに応じて変化する。
【0092】
図11に示したエラーメッセージは一例に過ぎず、別の形式のエラーメッセージを用いてもよい。
図15に示した擬似コードは一例に過ぎず、別の形式の擬似コードを用いてもよい。
【0093】
図16は、
図1のインストール支援装置101及び
図3の情報処理装置201として用いられる情報処理装置のハードウェア構成例を示している。
図16の情報処理装置は、CPU(Central Processing Unit)1601、メモリ1602、入力装置1603、出力装置1604、補助記憶装置1605、媒体駆動装置1606、及びネットワーク接続装置1607を含む。これらの構成要素はハードウェアであり、バス1608により互いに接続されている。
【0094】
メモリ1602は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)等の半導体メモリであり、処理に用いられるプログラム及びデータを記憶する。メモリ1602は、
図3の記憶部317として動作してもよい。
【0095】
CPU1601(プロセッサ)は、例えば、メモリ1602を利用してプログラムを実行することにより、
図1の判定部111及び生成部112として動作する。CPU1601は、メモリ1602を利用してプログラムを実行することにより、
図3の追加部311、実行部312、生成部313、及びインストール部314としても動作する。
【0096】
入力装置1603は、例えば、キーボード、ポインティングデバイス等であり、ユーザ又はオペレータからの指示又は情報の入力に用いられる。出力装置1604は、例えば、表示装置、プリンタ等であり、ユーザ又はオペレータへの問い合わせ又は指示、及び処理結果の出力に用いられる。処理結果は、要件ファイル323、実行ログ324、又は追加ライブラリリスト325であってもよい。出力装置1604は、
図1の出力部113又は
図3の表示部315として動作してもよい。
【0097】
補助記憶装置1605は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置1605は、ハードディスクドライブであってもよい。情報処理装置は、補助記憶装置1605にプログラム及びデータを格納しておき、それらをメモリ1602にロードして使用することができる。補助記憶装置1605は、
図3の記憶部317として動作してもよい。
【0098】
媒体駆動装置1606は、可搬型記録媒体1609を駆動し、その記録内容にアクセスする。可搬型記録媒体1609は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体1609は、CD-ROM(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリ等であってもよい。ユーザ又はオペレータは、可搬型記録媒体1609にプログラム及びデータを格納しておき、それらをメモリ1602にロードして使用することができる。
【0099】
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ1602、補助記憶装置1605、又は可搬型記録媒体1609のような、物理的な(非一時的な)記録媒体である。
【0100】
ネットワーク接続装置1607は、通信ネットワーク203に接続され、通信に伴うデータ変換を行う通信インタフェース回路である。情報処理装置は、プログラム及びデータを外部の装置からネットワーク接続装置1607を介して受信し、それらをメモリ1602にロードして使用することができる。ネットワーク接続装置1607は、
図1の出力部113又は
図3の通信部316として動作してもよい。
【0101】
なお、情報処理装置が
図16のすべての構成要素を含む必要はなく、情報処理装置の用途又は条件に応じて一部の構成要素を省略することも可能である。例えば、ユーザ又はオペレータとのインタフェースが不要である場合は、入力装置1603及び出力装置1604を省略してもよい。可搬型記録媒体1609を使用しない場合は、媒体駆動装置1606を省略してもよい。
【0102】
図2のライブラリサーバ202としては、
図16と同様の情報処理装置を用いることができる。
【0103】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【0104】
図1乃至
図16を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
(付記1)
インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加し、
前記複数のライブラリ各々の識別情報が前記判定対象リストに追加される度に、前記判定対象リストに含まれる識別情報が示すライブラリと、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む、複数の判定対象ライブラリの間の適合性を判定する判定処理を行い、
前記判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、前記追加された識別情報を前記判定対象リストから削除し、
前記判定処理において、前記追加された識別情報が示すライブラリに関する不適合が検出されなかった場合、前記判定対象リストに含まれる識別情報と前記依存ライブラリの識別情報とを含む、ライブラリリストを生成し、
前記複数のライブラリに対する前記判定処理が終了した後、前記ライブラリリストを出力する、
処理をコンピュータに実行させるためのインストール支援プログラム。
(付記2)
前記判定処理は、前記複数の判定対象ライブラリのうち、前記追加された識別情報が示すライブラリ、又は前記追加された識別情報が示すライブラリが依存する依存ライブラリについて、他の判定対象ライブラリと適合するバージョンが存在しない場合、前記追加された識別情報が示すライブラリに関する不適合が検出されたと判定する処理を含むことを特徴とする付記1記載のインストール支援プログラム。
(付記3)
前記ライブラリリストに含まれる識別情報が示すライブラリをインストールする処理を、前記コンピュータにさらに実行させることを特徴とする付記1又は2記載のインストール支援プログラム。
(付記4)
前記判定処理は、前記判定対象リストに含まれる識別情報と、前記判定対象リストに含まれる識別情報が示すライブラリのバージョンを示すバージョン情報と、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリの識別情報と、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリのバージョンを示すバージョン情報とを含む、要件情報を生成する処理を含み、
前記要件情報に含まれるバージョン情報が示すバージョンは、互いに適合しており、
前記ライブラリをインストールする処理は、前記要件情報を用いて、前記ライブラリリストに含まれる識別情報が示すライブラリをインストールする処理を含むことを特徴とする付記3記載のインストール支援プログラム。
(付記5)
インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加し、前記複数のライブラリ各々の識別情報が前記判定対象リストに追加される度に、前記判定対象リストに含まれる識別情報が示すライブラリと、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む、複数の判定対象ライブラリの間の適合性を判定する判定処理を行う判定部と、
前記判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、前記追加された識別情報を前記判定対象リストから削除し、前記追加された識別情報が示すライブラリに関する不適合が検出されなかった場合、前記判定対象リストに含まれる識別情報と前記依存ライブラリの識別情報とを含む、ライブラリリストを生成する生成部と、
前記複数のライブラリに対する前記判定処理が終了した後、前記ライブラリリストを出力する出力部と、
を備えることを特徴とするインストール支援装置。
(付記6)
前記判定部は、前記複数の判定対象ライブラリのうち、前記追加された識別情報が示すライブラリ、又は前記追加された識別情報が示すライブラリが依存する依存ライブラリについて、他の判定対象ライブラリと適合するバージョンが存在しない場合、前記追加された識別情報が示すライブラリに関する不適合が検出されたと判定することを特徴とする付記5記載のインストール支援装置。
(付記7)
前記ライブラリリストに含まれる識別情報が示すライブラリをインストールするインストール部をさらに備えることを特徴とする付記5又は6記載のインストール支援装置。
(付記8)
前記判定部は、前記判定対象リストに含まれる識別情報と、前記判定対象リストに含まれる識別情報が示すライブラリのバージョンを示すバージョン情報と、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリの識別情報と、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリのバージョンを示すバージョン情報とを含む、要件情報を生成し、
前記要件情報に含まれるバージョン情報が示すバージョンは、互いに適合しており、
前記インストール部は、前記要件情報を用いて、前記ライブラリリストに含まれる識別情報が示すライブラリをインストールすることを特徴とする付記7記載のインストール支援装置。
(付記9)
インストール対象の複数のライブラリ各々の識別情報を、1つずつ判定対象リストに追加し、
前記複数のライブラリ各々の識別情報が前記判定対象リストに追加される度に、前記判定対象リストに含まれる識別情報が示すライブラリと、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリとを含む、複数の判定対象ライブラリの間の適合性を判定する判定処理を行い、
前記判定処理において、追加された識別情報が示すライブラリに関する不適合が検出された場合、前記追加された識別情報を前記判定対象リストから削除し、
前記判定処理において、前記追加された識別情報が示すライブラリに関する不適合が検出されなかった場合、前記判定対象リストに含まれる識別情報と前記依存ライブラリの識別情報とを含む、ライブラリリストを生成し、
前記複数のライブラリに対する前記判定処理が終了した後、前記ライブラリリストを出力する、
処理をコンピュータが実行することを特徴とするインストール支援方法。
(付記10)
前記判定処理は、前記複数の判定対象ライブラリのうち、前記追加された識別情報が示すライブラリ、又は前記追加された識別情報が示すライブラリが依存する依存ライブラリについて、他の判定対象ライブラリと適合するバージョンが存在しない場合、前記追加された識別情報が示すライブラリに関する不適合が検出されたと判定する処理を含むことを特徴とする付記9記載のインストール支援方法。
(付記11)
前記ライブラリリストに含まれる識別情報が示すライブラリをインストールする処理を、前記コンピュータがさらに実行することを特徴とする付記9又は10記載のインストール支援方法。
(付記12)
前記判定処理は、前記判定対象リストに含まれる識別情報と、前記判定対象リストに含まれる識別情報が示すライブラリのバージョンを示すバージョン情報と、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリの識別情報と、前記判定対象リストに含まれる識別情報が示すライブラリが依存する依存ライブラリのバージョンを示すバージョン情報とを含む、要件情報を生成する処理を含み、
前記要件情報に含まれるバージョン情報が示すバージョンは、互いに適合しており、
前記ライブラリをインストールする処理は、前記要件情報を用いて、前記ライブラリリストに含まれる識別情報が示すライブラリをインストールする処理を含むことを特徴とする付記11記載のインストール支援方法。
【符号の説明】
【0105】
101 インストール支援装置
111 判定部
112、313 生成部
113 出力部
201 情報処理装置
202 ライブラリサーバ
203 通信ネットワーク
311 追加部
312 実行部
314 インストール部
315 表示部
316 通信部
317 記憶部
321 初期ライブラリリスト
322 判定対象リスト
323 要件ファイル
324 実行ログ
325 追加ライブラリリスト
1501~1506 文
1601 CPU
1602 メモリ
1603 入力装置
1604 出力装置
1605 補助記憶装置
1606 媒体駆動装置
1607 ネットワーク接続装置
1608 バス
1609 可搬型記録媒体