无法执行使用PyInstaller构建的python脚本

时间:2018-09-24 19:44:34

标签: python anaconda pyinstaller

Traceback (most recent call last):
  File "site-packages\pandas\__init__.py", line 26, in <module>
  File "C:\Users\adas\AppData\Local\Continuum\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\adas\AppData\Local\Continuum\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module
    module = loader.load_module(fullname)
  File "pandas\_libs\tslibs\conversion.pxd", line 11, in init pandas._libs.tslib
  File "C:\Users\adas\AppData\Local\Continuum\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module
    module = loader.load_module(fullname)
  File "pandas\_libs\tslibs\conversion.pyx", line 1, in init pandas._libs.tslibs.conversion
ModuleNotFoundError: No module named 'pandas._libs.tslibs.np_datetime'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "fetchall2.py", line 5, in <module>
    import pandas as pd
  File "C:\Users\adas\AppData\Local\Continuum\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.np_datetime' 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.
[283516] Failed to execute script fetchall2

我正在尝试执行我编写的python脚本。该脚本应根据matplotlib创建的图创建一个PNG文件。当我在spyder IDE上运行它时,它可以正常工作,但是当我使用PyInstaller构建它时,它会失败。

使用这些进口

import MySQLdb
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('Agg')
import pandas as pd
from sklearn.preprocessing import Imputer, LabelEncoder, OneHotEncoder, StandardScaler
from sklearn import svm
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression

我尝试遵循Petr Szturc's Method,并创建了一个hooks-pandas.py文件,并使用了hiddenimports = ['pandas._libs.tslibs.tslibs.np_datetime'],但是继续获得相同的追溯。

Anaconda 4.5.11

Python 3.6

1 个答案:

答案 0 :(得分:0)

我认为我过去也有同样的错误。

我的项目中有一个pyinstaller_hooks目录,文件hook-pandas.py带有以下代码:

from PyInstaller.utils.hooks import collect_submodules

hiddenimports = collect_submodules('pandas._libs.tslibs')

然后在运行PyInstaller时,我将目录传递到--additional-hooks-dir

pyinstaller --additional-hooks-dir pyinstaller_hooks your_python_file.py

这使您很容易识别我对钩子所做的更改,而不是将它们混合到PyInstaller文件夹中,并且还将它们检入任何git repo中。我认为这比链接中建议的方法干净得多。