質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1124閲覧

[python]google ads api を使った検索ボリューム自動収集プログラム exeで動作させる際の不具合

take_brs

総合スコア10

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/05/22 19:55

実現したいこと

google ads apiを使った検索ボリューム自動収集プログラムを作成し、他PCで使うためにexeファイル化する。

問題点

exeファイルを実行させた際、下記のような例外が発生しました。

python

1Traceback (most recent call last): 2 File "keywords_volume.py", line 258, in <module> 3 File "keywords_volume.py", line 70, in main 4 File "google\ads\googleads\client.py", line 358, in get_service 5 File "google\ads\googleads\client.py", line 207, in _get_api_services_by_version 6ValueError: Specified Google Ads API version "v10" does not exist. Valid API versions are: "v10", "v9" 7[6256] Failed to execute script 'keywords_volume' due to unhandled exception!

グーグル翻訳にかけると、
「ValueError:指定されたGoogleAdsAPIバージョン「v10」は存在しません。有効なAPIバージョンは次のとおりです: "v10"、 "v9"
[6256]未処理の例外が原因で、スクリプト'keywords_volume'の実行に失敗しました!」
となります。

指定したバージョンの「v10」は存在しない、という記述と、
有効なAPIバージョンに「v10」がある、という記述が矛盾しているように思えます。
「v10」が有効であれば、なぜ例外処理されているのだろうと頭を悩ませ、かれこれ2時間試行錯誤していますが、一向に解決策が見えません。

exeファイルに変換する前はそのような問題もなく実行できています。

該当のソースコード

python

1@classmethod 2 def _get_api_services_by_version(cls, version): 3 """Returns a module with all services and types for a given API version. 4 5 Args: 6 version: a str indicating the API version. 7 8 Returns: 9 A module containing all services and types for the a API version. 10 """ 11 try: 12 version_module = import_module(f"google.ads.googleads.{version}") 13 except ImportError: 14 raise ValueError( 15 'Specified Google Ads API version "{}" does not ' 16 'exist. Valid API versions are: "{}"'.format( 17 version, '", "'.join(_VALID_API_VERSIONS) 18 ) 19 ) 20 return version_module

自分で調べたこと

pythonファイルである「keywords_volume.py」での実行であれば問題はなく、exeファイルにした際に上記の例外が発生したことから、exeファイルを生成するときに、v10以外の別なフォルダから参照されたのではないかと考えました。
そこで「keywords_volume.py」を動作させるのに必要のないファイルをすべて消して、改めてexeファイル化させましたが、結果は変わらずでした。

ツールのバージョン

python 3.10.4
pyinstaller 5.0.1

https://github.com/googleads/google-ads-python
より
google-ads-python-16.0.0
をもとにプログラム作成。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

読み込むモジュールが足りなかったようです。pyinstallerにはこのような不具合がたまにあるらしい。

exe化するときに出力される「.spec」内の「hiddenimports=[]」の配列に、例外で発生していた「No Module named ""」で表されているモジュール名を追加していきます。その後、「pyinstaller *.spec」で新たにexeファイルを作成しますが、別なモジュール名で同様の例外が発生した場合は、同じように繰り返していきます。

モジュール関連でのエラーが発生しなくなった後に、

python

1Exception ignored in: 'grpc._cython.cygrpc.ssl_roots_override_callback' 2E0525 00:14:11.737000000 15596 src/core/lib/security/security_connector/ssl_utils.cc:583] assertion failed: pem_root_certs != nullptr

というエラーが発生しましたが、調べてみると認証関連でのエラーでした。
https://qiita.com/hatt_takumi/items/afb5164326a2eb6f6259
こちらの記事を参考に、specファイルに書き足したのが以下になります。

python

1from PyInstaller.utils.hooks import collect_data_files 2 3a=Analysis( 4.. 5datas=collect_data_files("grpc"), 6.. 7)

さらにspecファイルをpyinstallerでexe化させることで、課題は解決しました。

回答を考えてくださった皆様、誠にありがとうございました。

投稿2022/05/24 15:36

take_brs

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問