【问题标题】:pyinstaller ImportError: C extension: No module named np_datetime not builtpyinstaller ImportError: C extension: No module named np_datetime not built
【发布时间】:2018-11-11 03:36:41
【问题描述】:

我正在为我的程序运行一个使用 Python 2.7 的虚拟环境。 在windows上创建可执行文件后似乎有问题。 我跑了 venv/Scripts/pyinstaller.exe -F main.py 一切似乎都很好。但是当我点击创建的可执行文件ma​​in.exe。 有错误。

久经考验

  1. 我已经重新安装了 pandas 和 pyinstaller
  2. 在环境中的 hooks 文件夹中实现了 hook-pandas.py。 hook-pandas
  3. 确保环境已激活。
  4. 在构建可执行文件之前检查程序是否运行良好。
  5. 重新创建了环境。

毕竟,当我运行可执行文件时,系统会提示我这个问题 [参见 Importerror]。

调试这个非常痛苦,因为显示错误的命令提示符不会暂停,而是几乎立即关闭。

Similar issues

寻找建议 我希望提出解决 Pyinstaller 问题的建议。任何要阅读的资源都会很好。 通常,我对 python 没有任何问题,因为 Pycharm 有几个方便的调试工具可以帮助我识别问题

【问题讨论】:

    标签: pyinstaller timedelta


    【解决方案1】:

    我遇到了同样的问题并找到了这个帖子,但我设法解决了它借用reference you posted(关于pandas._libs.tslibs.timedeltas),所以谢谢你!

    在那篇文章中,导致ImportError 的模块实际上是pandas._libs.tslibs.timedeltas,如果您查看发布者的日志。但是你和我遇到的错误是指np_datetime。所以,从traceback的日志中,我终于知道hook-pandas.py中我们要写的代码应该是这样的:

    hiddenimports = ['pandas._libs.tslibs.np_datetime']
    

    也许仅此一项就可以解决您的问题,但是,就我而言,一旦我解决了np_datetime 问题,就会出现其他非常相似的ImportError 问题(也与关于熊猫的隐藏导入有关),因此,如果您遇到同样的问题,只需将hiddenimports 定义如下:

    hiddenimports = ['pandas._libs.tslibs.np_datetime','pandas._libs.tslibs.nattype','pandas._libs.skiplist']
    

    TL;DR:

    你可以先试试写

    hiddenimports = ['pandas._libs.tslibs.np_datetime']
    

    进入hook-pandas.py。但是,如果由于某种原因您遇到了与我之后完全相同的问题,请尝试

    hiddenimports = ['pandas._libs.tslibs.np_datetime','pandas._libs.tslibs.nattype','pandas._libs.skiplist']
    

    如果您想深入了解(或遇到与我所做的不同的 pandas ImportError),这是您的回溯日志中引用的 pandas __init__.py 中的代码(第 23 到 35 行):

    from pandas.compat.numpy import *
    
    try:
        from pandas._libs import (hashtable as _hashtable,
                                 lib as _lib,
                                 tslib as _tslib)
    except ImportError as e:  # pragma: no cover
        # hack but overkill to use re
        module = str(e).replace('cannot import name ', '')
        raise ImportError("C extension: {0} 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.".format(module))
    

    从此我进入了

    C:\Python27\Lib\site-packages\pandas_libs

    C:\Python27\Lib\site-packages\pandas_libs\tslibs

    文件夹并找到导致错误的模块的确切名称。

    我希望它能像我一样解决你的问题。

    干杯!

    【讨论】:

    • 第一个解决方案也给了我同样的问题。第二个解决方案对我有用,现在一切都很好。感谢您帮助我了解如何调试它。真的很感激! :D
    • 谢谢!你让我头疼:)
    • 谢谢,这为我节省了很多时间!
    猜你喜欢
    • 2017-11-04
    • 2015-04-30
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2012-08-12
    • 2011-10-19
    • 2018-01-19
    相关资源
    最近更新 更多