Pyinstaller和Pycrypto

hor*_*nic 5 python pyinstaller pycrypto

我们最近将pycrypto添加到我们一直在研究的项目中,现在我无法在使用pyinstaller构建软件之后运行该软件.

我在pyinstaller中遇到了新软件包的问题,​​但我无法特别解决这个问题.

我在尝试运行构建的软件时遇到的错误如下(对于释义而言,构建需要相当长的时间)

起初它是这样的:

No package Crypto.Cipher
Run Code Online (Sandbox Code Playgroud)

所以我添加'Crypto'到hiddenimports我的.spec文件中.然后我得到了,

No module named Cipher
Run Code Online (Sandbox Code Playgroud)

所以我改变'Crypto'了'Crypto.Cipher',然后我得到了,

Crypto.Cipher has no attribute AES
Run Code Online (Sandbox Code Playgroud)

所以我改变了'Crypto.Cipher','Crypto.Cipher.AES'然后我得到了

File "C:\Folder\made\by\pyinstaller\Crypto.Cipher.AES", line 49 in <module>
ImportError: cannot import name blockalgo
Run Code Online (Sandbox Code Playgroud)

所以我改为'Crypto.Cipher.AES','Crypto.Cipher.AES.blockalgo'错误没有改变.

我尝试了一些不同的配置,但构建脚本的输出总是说明了一些内容

ERROR: Hidden import 'blockalgo' not found.
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何正确导入,或知道一个技巧,让pycrypto与pyinstaller玩得很好?

kad*_*adu 3

根据pyinstaller 手册:

您可以使用 Python 的详细导入标志来验证隐藏导入是否是问题所在。如果导入消息显示“找不到模块”,但 warnproject.txt 文件没有同一模块的“没有名为...”的消息,则问题是隐藏导入。

隐藏导入是通过在分析时挂钩模块(执行隐藏导入的模块)来处理的。请按如下方式执行此操作:

  1. 创建一个名为 hook-module.py 的文件(其中 module 是完全限定的 Python 名称,例如 hook-xml.dom.py)并将其放置在某个位置。记住该位置作为您的私人钩子目录。

  2. 在 .spec 文件中,将您的私有 hooks 目录作为 hookspath 参数传递给 Analysis,以便进行搜索。例子:

    a = Analysis(['myscript.py'], hookspath='/my/priv/hooks') 在大多数情况下,钩子模块只有一行:

    hiddenimports = ['module1', 'module2'] 当分析找到此文件时,它将完全按照模块显式导入 module1 和 module2 的方式进行。

这个问题似乎相关,答案可能对您也有用。

最后,这份报告似乎也存在类似的问题。用户似乎能够通过更新到 pyinstaller 2.1 来修复它,因此如果您还没有尝试过,您可能想尝试一下。