web-dev-qa-db-ja.com

PyInstallerに「pandas._libs.tslibs.timedeltas」という名前のモジュールはありません

Windows用のPyInstaller(開発版)を使用して、Pythonスクリプトをexeにラップしようとしています。

スクリプトはPandasを使用し、exeの実行時にエラーが発生しました。

Traceback (most recent call last):   File "site-packages\pandas\__init__.py", line 26, in <module>   File "C:\Users\Eddie\Anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
    exec(bytecode, module.__dict__)   File "site-packages\pandas\_libs\__init__.py", line 4, in <module>   File "C:\Users\Eddie\Anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module
    module = loader.load_module(fullname)   File "pandas/_libs/tslib.pyx", line 1, in init pandas._libs.tslib ModuleNotFoundError: No module named 'pandas._libs.tslibs.timedeltas'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):   File "G5k Version file Extract (with tkinter).py", line 15, in <module>   File "C:\Users\Eddie\Anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
    exec(bytecode, module.__dict__)   File "site-packages\pandas\__init__.py", line 35, in <module> ImportError: C extension: No module named 'pandas._libs.tslibs.timedeltas' not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext --inplace --force' to build the C extensions first.

私はpandasのないプログラムでこれを試しましたが、すべてうまくいきました。

これは 別の質問 Python 2で既に解決されていますが、Python 3を使用していますが、その解決策は、変更された.specファイル形式。

Python 3.6
PyInstaller-バージョン3.3
パンダ-バージョン0.20.3

23
Eduard Fidler

PyInstaller 3.3、Pandas 0.21.0、Python 3.6.1。

PyInstallerのまだ公開/コミットされていない修正のおかげで、これを解決できました。 this および this を参照してください。そして、それを1つの実行可能ファイルにパックする機能を維持します。

基本的に:

  1. PyInstallerフォルダーを見つけます。 C:\Program Files\Python\Lib\site-packages\PyInstaller\hooks

  2. ファイルhook-pandas.pyをコンテンツ(またはエラーに基づいて同様のもの)で作成します。

    hiddenimports = ['pandas._libs.tslibs.timedeltas']
    
  3. それを保存します+念のため.specファイル、buildフォルダー、distフォルダーを削除しました。

  4. pyinstaller -F my_app.py.を実行します

PyInstallerをアップグレードまたは再インストールしない限り、この修正は機能するはずです。したがって、.specファイルを編集する必要はありません。

たぶん、彼らは私たちのためにすぐに修正を含めるでしょう! :)

48
Petr Szturc

私はそれがあなたを助けるかもしれないとは思いませんが、あなたが言及した投稿の解決策に従って、Windows 7でpython 3.6 pyinstaller 3.3およびpandas 0.21.0で動作します。

そのため、これを分析直後にspecファイルに追加します。

def get_pandas_path():
    import pandas
    pandas_path = pandas.__path__[0]
    return pandas_path

dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries)

また、私の仕様ファイル形式は あなたが言及した投稿 のものと同じです。

12
Simon

「--hidden-import」フラグを使用して、この問題を解決することができました。これがこのスレッドに出くわした誰かに役立つことを願っています。

pyinstaller --onefile --hidden-import pandas._libs.tslibs.timedeltas myScript.py
6
Stephan

Anacondaを使用している場合、パッケージをアンインストールしようとしたときに、pandas依存関係が中断され、必要なスクリプトを取得できなかった可能性が高くなります。 conda install pandasを実行すると、別のエラーが発生する可能性があります。

module 'pandas' has no attribute 'compat'

したがって、pandas conda uninstall pandasをアンインストールして再インストールしてみてください。conda install pandasを使用して再度インストールすると、問題が解決します。一方、Anacondaを使用していない場合は、Pythonスクリプトフォルダーpip uninstall pandas & pip install pandasを指すコマンドプロンプトで同じ操作を試してください。

ほとんどの場合、これで問題は解決するはずです。すべての可能性をカバーするために、パンダをインストールした後、AnacondaからSpyderを起動することを忘れないでください。

0
Srini