如何在pyinstaller中为textblob添加一个钩子

时间:2017-12-27 07:09:41

标签: hook pyinstaller textblob

我正在尝试使用pyinstaller创建一个.exe文件并执行它 它不会从中获取任何结果 b = TextBlob(ar) score = b.sentiment.polarity

在控制台上执行时返回正确的值 但在使用.exe

执行时返回0
def start_dmo():
 print ("Importing all the required packages...")
 from textblob import TextBlob
 input ("press enter to continue")
 print("All Necessary Packages imported")
 input("press enter to continue")
 ar="I cant be more happy with this"
 print(ar)
 b = TextBlob (ar)
 score = b.sentiment.polarity
 print (b.sentiment.polarity)
 input("press enter to continue")
 score = round (score, 2)
 if score > 0.0:
    senti = "Positive"
elif score < 0.0:
    senti = "Negative"
else:
    senti = "Neutral"
 print("Score"+str(score)+"sentiment"+senti)
 input("press enter to continue")

start_dmo()

this is the output when the above code is executed on console

this is the output when the above code is executed on .exe of the same code which is created using pyinstaller

4 个答案:

答案 0 :(得分:0)

尝试在textblob函数之前导入start_dmo,以便pyinstaller将其视为依赖项。

from textblob import TextBlob

start_dmo():
    ....

答案 1 :(得分:0)

问题解决了! 简单解决方案 将pyinstaller更改为cx_Freeze 仅供参考cx_Freeze与python 3.6完美搭配 要知道如何使用cx_freeze创建.exe,请按照以下链接: https://pythonprogramming.net/converting-python-scripts-exe-executables/

如果你使用numpy或pandas你可能需要添加选项cz它可能不会导入numpy形成你的exe,所以解决该问题如下链接: Creating cx_Freeze exe with Numpy for Python

祝你好运!

答案 2 :(得分:0)

Pyinstaller不在程序包中包含en-sentiment.xml,因此情绪分析器缺少依赖项并返回0.在这种情况下,Textblob不会产生错误。

pyinstaller要求您手动在myscript.spec中指定任何数据文件。但是,正如您所发现的那样,cx_Freeze似乎尊重setup.py配置,该配置指定了已包含的数据文件:

package_data={
  "textblob.en": ["*.txt", "*.xml"]
}

要解决此问题,请修改pyinstaller myscript.spec文件以复制textblob/en/en-sentiment.xml,或按照讨论切换到cx_Freeze

请参阅Github上的帖子。

答案 3 :(得分:0)

嘿,将textblob从站点程序包复制到您的工作目录中 并在.spec

下运行
  a = Analysis(.....
         datas=[( 'textblob/en/*.txt', 'textblob/en' ),
     ( 'textblob/en/*.xml', 'textblob/en' )],
     ....)

它将起作用