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

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

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

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

Python

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

Q&A

解決済

2回答

8615閲覧

Pyinstallerを使用し.py→.exeファイルにコンパイルしたが、外部モジュールが認識されず実行できない

koyamashinji

総合スコア45

PyInstaller

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

Python

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

0グッド

0クリップ

投稿2020/09/05 04:24

編集2020/09/05 08:17

pyinstallerを使用しpyファイルをexeファイルにコンパイルしました。(コマンドプロンプト >pyinstaller hoge.py --onefile)

exeファイル実行時、下記のエラーとなってしまい、対処方法が分からず困っています。

ModuleNotFoundError: No Module named 'pynput' [1864]Failed to execute script hoge.py

ちなみに、
・pyファイルは正常に実行される
・コンパイル時にはエラーは出ない
・対象のexeファイルは、外部モジュールpynputと同じディレクトリ内に置いている


<試したこと>
コンパイル時に、hidden-importで対象モジュール名を強制指示しましたが、やはりダメでした。
(コマンドプロンプト)>pyinstaller hoge.py --onefile --hidden-import=pynput


<参考>
下記、pyinstallerにて生成された.specファイルの中身です。(原因と関係ないかもしれませんが・・・)

# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['hoge.py'], pathex=['C:\Users\...\PycharmProjects\hoge'], binaries=[], datas=[], hiddenimports=['pynput'], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='test', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True )

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

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

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

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

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

guest

回答2

0

最新の pynput 1.7.* と Pyinstaller の組み合わせには問題があるようです。
pynput 1.6.8 を利用してみてください。
pip install pynput==1.6.8

pynput 1.7.1 利用時のエラー例:

(.venv) C:\work\tmp\pynputprj\dist>hoge.exe Traceback (most recent call last): File "hoge.py", line 1, in <module> File "c:\work\tmp\pynputprj.venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module exec(bytecode, module.__dict__) File "pynput\__init__.py", line 40, in <module> File "c:\work\tmp\pynputprj.venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module exec(bytecode, module.__dict__) File "pynput\keyboard\__init__.py", line 31, in <module> File "pynput\_util\__init__.py", line 76, in backend ImportError [60876] Failed to execute script hoge

上記で解決しない場合、クリーンで最小の構成で問題が発生するか確認してください。

  • venv を利用してクリーンな環境を用意する
  • 簡単なプログラムでエラーが再現するか確認する
  • エラー内容はスタックトレースも含めてすべて張り付ける

cmd

1> mkdir myproj 2> cd myproj 3> python -m venv _venv 4> _venv\Scripts\activate.bat 5> pip install pyinstaller pynput==1.6.8 6> notepad mytest.py 7 -- 編集 -- 8> pyinstaller mytest.py --onefile 9> dist\mytest.exe

python3

1# mytest.py 2import pynput 3print(dir(pynput))

投稿2020/09/05 20:56

編集2020/09/06 06:14
Milly

総合スコア167

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

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

koyamashinji

2020/09/06 04:48

ご回答ありがとうございます。pynput 1.6.8を再インストールして、同じプロセスを実行してみましたが、やはり'pynput'モジュールが見つからない、とエラーが出ていまします・・
guest

0

自己解決

pyinstallerを、4.0(最新版)に更新し、
pynputを、 1.7.* → pynput 1.6.8 に更新し
py -> exe化すると、正常動作しました。

(Milly様、ヒントを頂きまして有り難うございました。)

投稿2020/09/06 05:58

koyamashinji

総合スコア45

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問