首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyinstaller & Pycrypto

Pyinstaller & Pycrypto
EN

Stack Overflow用户
提问于 2014-04-23 01:27:06
回答 4查看 9.7K关注 0票数 5

我们最近把pycrypto添加到了一个我们一直在做的项目中,现在我无法运行这个软件,因为它是用pyinstaller构建的。

我在pyinstaller中遇到了新的包问题,但是我无法特别地修复这个包。

当我试图运行构建的软件时,我遇到的错误如下(抱歉,编译需要相当长的时间)

一开始是这样的:

代码语言:javascript
复制
No package Crypto.Cipher

因此,我将'Crypto'添加到hiddenimports文件中的.spec文件中。然后我得到了,

代码语言:javascript
复制
No module named Cipher

所以我把'Crypto'改成了'Crypto.Cipher'

代码语言:javascript
复制
Crypto.Cipher has no attribute AES

所以我把'Crypto.Cipher'改成了'Crypto.Cipher.AES'

代码语言:javascript
复制
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',而错误没有改变。

我尝试过几种不同的配置,但是构建脚本的输出总是显示出

代码语言:javascript
复制
ERROR: Hidden import 'blockalgo' not found.

是否有人知道如何正确导入这个文件,或者是否知道如何让pycrypto与pyinstaller合作?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-23 02:18:09

根据pyinstaller手册

您可以使用Python的详细导入标志来验证隐藏导入是否是问题所在。如果导入消息说“模块未找到”,但warnproject.txt文件没有“没有模块名为.”消息对于相同的模块,那么问题是隐藏导入。 隐藏导入是通过在分析时挂钩模块(执行隐藏导入的模块)来处理的。这样做如下:

  1. 创建一个名为钩子-module.py的文件(其中模块是完全限定的Python名称,例如,钩子-xml.dom.py),并将其放在某个地方。记住这个地方是您的专用钩子目录。
  2. 在.spec文件中,将您的私有钩子目录作为钩子参数传递给Analysis,以便进行搜索。示例: A= Analysis('myscript.py',hookspath='/my/priv/hooks')在大多数情况下钩子模块只有一行: 当分析找到这个文件时,隐藏导入=‘module 1’,' module2‘时,它将像模块显式导入module1和module2一样进行。

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

最后,本报告似乎包含了类似的问题。用户似乎能够通过更新到pyinstaller 2.1来修复它,所以如果您还没有更新到pyinstaller 2.1,您可能需要尝试一下。

票数 3
EN

Stack Overflow用户

发布于 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!

票数 2
EN

Stack Overflow用户

发布于 2015-06-12 03:51:38

变化?为什么不加?将这些添加到hiddenimport解决了这个问题:'Crypto', 'Crypto.Cipher', 'Crypto.Cipher.AES', 'Crypto.Random',

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23233222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档