我们最近把pycrypto添加到了一个我们一直在做的项目中,现在我无法运行这个软件,因为它是用pyinstaller构建的。
我在pyinstaller中遇到了新的包问题,但是我无法特别地修复这个包。
当我试图运行构建的软件时,我遇到的错误如下(抱歉,编译需要相当长的时间)
一开始是这样的:
No package Crypto.Cipher因此,我将'Crypto'添加到hiddenimports文件中的.spec文件中。然后我得到了,
No module named Cipher所以我把'Crypto'改成了'Crypto.Cipher',
Crypto.Cipher has no attribute AES所以我把'Crypto.Cipher'改成了'Crypto.Cipher.AES'
File "C:\Folder\made\by\pyinstaller\Crypto.Cipher.AES", line 49 in <module>
ImportError: cannot import name blockalgo因此,我将'Crypto.Cipher.AES'更改为'Crypto.Cipher.AES.blockalgo',而错误没有改变。
我尝试过几种不同的配置,但是构建脚本的输出总是显示出
ERROR: Hidden import 'blockalgo' not found.是否有人知道如何正确导入这个文件,或者是否知道如何让pycrypto与pyinstaller合作?
发布于 2014-04-23 02:18:09
根据pyinstaller手册
您可以使用Python的详细导入标志来验证隐藏导入是否是问题所在。如果导入消息说“模块未找到”,但warnproject.txt文件没有“没有模块名为.”消息对于相同的模块,那么问题是隐藏导入。 隐藏导入是通过在分析时挂钩模块(执行隐藏导入的模块)来处理的。这样做如下:
这个问题似乎是相关的,答案也可能对您有用。
最后,本报告似乎包含了类似的问题。用户似乎能够通过更新到pyinstaller 2.1来修复它,所以如果您还没有更新到pyinstaller 2.1,您可能需要尝试一下。
发布于 2019-03-20 15:08:28
这个答案是:
来自https://stackoverflow.com/a/48408950/4355695:使用pycryptodomex而不是pycryptodome。@galgalesh在OP问题下面的评论给出了为什么不再使用pycrypto。
pip卸载-y pycrypto卸载-y pycryptodome pip安装pycryptodomex
pycryptodomex给出了一个明确无误的Cryptodome模块来替换Crypto。因此,在您的.py程序中,将Crypto替换为Cryptodome:
从Cryptodome.PublicKey导入RSA
现在,我重新运行了pyinstaller,并且运行得很好。无需执行任何特殊的隐藏导入等操作。在dist文件夹中,现在有一个清晰的Crpytodome文件夹,保存了所有的..pyd。
对我来说很好!
使用pycryptodomex而不是pycrypto,它就能工作了!
我认为这是由于python3.6和主要的进化的pycrypto的工作!然后它停止使用2.7.16!
发布于 2015-06-12 03:51:38
变化?为什么不加?将这些添加到hiddenimport解决了这个问题:'Crypto', 'Crypto.Cipher', 'Crypto.Cipher.AES', 'Crypto.Random',
https://stackoverflow.com/questions/23233222
复制相似问题