使用py2exe和BeautifulSoup。脚本运行正常,但转换为.exe后,它显示错误

时间:2016-01-09 18:25:22

标签: python python-2.7 beautifulsoup py2exe python-module

我已经使用beautifulSoup创建了一个废弃网站的脚本。当我运行脚本时,我得到了我想要的东西。 所以继续我决定将其转换为inot .exe文件。转换已经完成,但它显示--- the following modules appear to be missing '_scproxy', 'builder.parserRejectedMarkup','builder.builder_registry', 'cchardet', 'chardet', 'html.parser', 'htmlslib', 'html5lib', 'iconvz' etc.

然而,它创建了.exe文件,当我尝试运行.exe文件时显示 -

bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?

我尝试卸载 - 重新安装软件包并尝试从可用内容中搜索,但这没有帮助。 以下是Script(p3_extract.py)的代码:

from bs4 import BeautifulSoup
import urllib2
import lxml
url="http://fuckinghomepage.com/"
page= urllib2.urlopen(url)
soup_package = BeautifulSoup(page, "lxml")
p1_soup= soup_package.find("p")
p2_soup = p1_soup.next_sibling
p3_soup = p2_soup.next_sibling
print p3_soup.string

这里是setup.py:

from distutils.core import setup
import py2exe
import lxml
setup(console=['p3_extract.py'])

帮帮我。(我在 win10-32bit和python 2.7 上这样做。) 感谢

1 个答案:

答案 0 :(得分:1)

我在使用 lxml selenium (而不是bs4)的项目中编译了类似的问题。解决方案是在你的setup.py py2exe选项中导入包,而不是像你那样在脚本中导入它们。

  

向setup.py添加选项

您可以使用更多py2exe options以确保导入项目所需的所有模块和包。 E.g。

# setup.py
from distutils.core import setup
import py2exe
setup(console=["p3_exctract.py"],
      options={
              "py2exe":{
                    "packages": ["lxml"] # List of the package you want to make sure that will be imported
               }
       }
    )

通过这种方式,您可以强制导入项目缺失的脚本