捆绑一个独立的exe

时间:2016-11-26 03:17:20

标签: python selenium py2exe

所以,我一直试图在Standalone EXE做很长时间。现在我安装了python 32位,我尝试了py2exe,使用它的bundle_files选项为我的项目comic-dl创建一个exe。

由于comic-dl有点像youtube-dl(即使是friggin'名称),所以在我无法使自己的setup.p文件正常工作之后,我复制了youtube-dls' setup.py file然后我修改它以使其适用于我的项目。

Here is my modification。然后我运行这些命令:

python setup.py install python setup.py py2exe

一切顺利,我得到一个comic-dl.exe(~6 MB)。但是,当我执行它时,我收到了这个错误:

Traceback (most recent call last):

  File "comic-dl.py", line 4, in <module>

  File "zipextimporter.pyo", line 82, in load_module

  File "honcho.pyo", line 12, in <module>

  File "zipextimporter.pyo", line 82, in load_module

  File "sites\mangafox.pyo", line 13, in <module>

  File "zipextimporter.pyo", line 82, in load_module

  File "selenium\webdriver\__init__.pyo", line 18, in <module>

  File "zipextimporter.pyo", line 82, in load_module

  File "selenium\webdriver\firefox\webdriver.pyo", line 39, in <module>

  File "zipextimporter.pyo", line 82, in load_module

  File "selenium\webdriver\remote\webdriver.pyo", line 25, in <module>

  File "zipextimporter.pyo", line 82, in load_module

  File "selenium\webdriver\remote\webelement.pyo", line 40, in <module>

  File "pkgutil.pyo", line 591, in get_data

IOError: [Errno 2] No such file or directory: 'selenium\\webdriver\\remote\\getAttribute.js'

我在selenium的文件夹中检查了getAttribute.js文件,文件就在那里。我甚至在项目中复制了selenium的文件夹,但仍然没有变化。

然后我尝试了this,这没有任何意义,因为当我更改选项并执行设置命令时,选项3和选项2中的所有内容都不一致。

在这种情况下,如何获得独立的exe?

3 个答案:

答案 0 :(得分:4)

我也遇到了这个问题。这是我解决它的方式:

  1. 转到C:\Users\---------\AppData\Local\Android\sdk1\tools>android avd [如果在其他目录中安装了selenium,则目录可能会有所不同。本质是找到文件]。有C:\Python27\selenium\webdriver\remote\getAttribute.js个文件。复制它们。
  2. 在您的发布IsDisplayed.js文件夹中,有一个dist文件。解压缩或在Windows默认查看器中打开它。
  3. 转到library.zip并粘贴在步骤1中复制的文件。
  4. 如果您解压缩selenium\webdriver\remote\,请将其压缩并替换原件。
  5. 它适用于我。希望这可以帮到你。

答案 1 :(得分:0)

看起来您可能必须在相对路径中设置可执行文件才能到达硬编码文件位置。

或者我建议您使用PyInstaller,在最好的情况下,不需要任何配置,并且可以在一个命令中立即为您提供可执行的可执行文件。

答案 2 :(得分:0)

这是我的解决方案。希望可以帮到你!

第1步:修改文件webelement.py

# customized code to resolve resources's path problem when executing py2exe executables
import sys
frozen = getattr(sys, 'frozen', '')
if not frozen:
    getAttribute_js = pkgutil.get_data(__package__, 'getAttribute.js').decode('utf8')
    isDisplayed_js = pkgutil.get_data(__package__, 'isDisplayed.js').decode('utf8')
else:
    approot = os.path.dirname(sys.executable)
    getAttribute_js = open(os.path.join(approot, 'getAttribute.js'), 'rb').read().decode('utf8')
    isDisplayed_js = open(os.path.join(approot, 'isDisplayed.js'), 'rb').read().decode('utf8')

注意:在我的环境中,此文件位于C:\ Python27 \ Lib \ site-packages \ selenium \ webdriver \ remote中。

第2步:在您的setup.py for py2exe中,将所需文件包含到您的数据文件中。 e.g。

data_files = [(r'.', glob(r'C:\Python27\Lib\site-packages\selenium\webdriver\remote\getAttribute.js')),
    (r'.', glob(r'C:\Python27\Lib\site-packages\selenium\webdriver\remote\isDisplayed.js'))]

然后你应该让你的exe工作。我在Windows 7,32位系统中测试了这个。 python 2.7,使用selenium 3.0.2。