有没有办法将二进制文件(例如 chromedriver)与用 Pyinstaller 编译的单个文件 app/exe 捆绑在一起?
Is there a way to bundle a binary file (such as chromedriver) with a single file app/exe compiled with Pyinstaller?
如我的问题 的答案所述,在 Pyinstaller 规范文件 (binaries=[('/usr/bin/chromedriver', './selenium/webdriver')]
) 的 binaries
中设置 chromedriver 的路径没有效果(除非它设置不正确)。也就是说,只要 chromedriver 在 PATH 中(在本例中为 /usr/bin),就会被访问。我的问题是关于在后台捆绑 chromedriver 的可能性,这样就不必在另一台机器上手动安装它。
我成功地将 chromedriver 与 pyinstaller 捆绑在一起(尽管不幸的是,我的 virusscanner 在我 运行 exe 之后标记了它,但这是另一个问题)
我猜你的问题是你没有在脚本中给出正确的 webdriver 路径(使用关键字 executable_path)。此外,我将 chromedriver 作为数据文件包含在内,尽管我不确定这是否有所作为..
这是我的例子。
sel_ex.py:
from selenium import webdriver
import os, sys, inspect #
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
脚本正确路径即可
免责声明:
-我没有使用单一文件设置,但这应该没有什么区别。
-我的 OS 是 windows
如我的问题 binaries=[('/usr/bin/chromedriver', './selenium/webdriver')]
) 的 binaries
中设置 chromedriver 的路径没有效果(除非它设置不正确)。也就是说,只要 chromedriver 在 PATH 中(在本例中为 /usr/bin),就会被访问。我的问题是关于在后台捆绑 chromedriver 的可能性,这样就不必在另一台机器上手动安装它。
我成功地将 chromedriver 与 pyinstaller 捆绑在一起(尽管不幸的是,我的 virusscanner 在我 运行 exe 之后标记了它,但这是另一个问题)
我猜你的问题是你没有在脚本中给出正确的 webdriver 路径(使用关键字 executable_path)。此外,我将 chromedriver 作为数据文件包含在内,尽管我不确定这是否有所作为..
这是我的例子。
sel_ex.py:
from selenium import webdriver
import os, sys, inspect #
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
脚本正确路径即可免责声明: -我没有使用单一文件设置,但这应该没有什么区别。 -我的 OS 是 windows