有没有办法将二进制文件(如chromedriver)与使用Pyinstaller编译的单个文件app / exe捆绑在一起?

时间:2016-12-08 01:23:47

标签: python selenium selenium-chromedriver pyinstaller

正如我的问题here的答案中所述,在Pyinstaller spec文件(binaries)中设置binaries=[('/usr/bin/chromedriver', './selenium/webdriver')]中chromedriver的路径没有效果(除非它是设置不正确)。也就是说,只要它在PATH(在这种情况下是/ usr / bin)中就可以访问chromedriver。我的问题是关于在后台捆绑chromedriver的可能性,这样就不必手动安装在另一台机器上。

1 个答案:

答案 0 :(得分:3)

我成功地将chromedriver与pyinstaller捆绑在一起(虽然不幸的是,在我运行exe之后,我的virusscanner标记了它,但这是另一个问题)

我猜您的问题是您没有在脚本中提供正确的webdriver路径(使用关键字executable_path)。此外,我将chromedriver作为数据文件包含在内,虽然我不确定这是否有所作为..

这是我的例子。

sel_ex.py:

from selenium import webdriver

import os, sys, inspect     # http://stackoverflow.com/questions/279237/import-a-module-from-a-relative-path
current_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe() ))[0]))

def init_driver():
    chromedriver = os.path.join(current_folder,"chromedriver.exe")
    # via this way, you explicitly let Chrome know where to find 
    # the webdriver.
    driver = webdriver.Chrome(executable_path = chromedriver) 
    return driver

if __name__ == "__main__":
    driver = init_driver()
    driver.get("http://www.imdb.com/")

sel_ex.spec:

....
binaries=[],
datas=[("chromedriver.exe",".")],
....

通过这种方式,chromedriver存储在主文件夹中,尽管它存储的位置无关紧要,只要脚本通过关键字executable_path正确路径

免责声明: - 我没有使用单文件设置,但这不应该有所作为。 -my OS是windows