按照此处的答案(如何在pyinstaller中包含chromedriver?)更新了Pyinstaller规范文件后,仍然无法从生成的应用程序文件访问chromedriver。问题可能出在.\\selenium\\webdriver哪里?那是从答案中复制过来的,我不确定它特定于Windows操作系统。
.\\selenium\\webdriver
在终端中运行UNIX可执行文件可以访问chromedriver。
完整的规格文件是:
# -*- mode: python -*- block_cipher = None a = Analysis([‘scriptname.py'], pathex=['/Users/Name/Desktop'], binaries=[('/usr/local/bin/chromedriver', '.\\selenium\\webdriver')], datas=None, hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, name=‘app name’, debug=False, strip=False, upx=True, console=False ) app = BUNDLE(exe, name=‘appname.app', icon=None, bundle_identifier=None)
该行pyinstaller appname.spec scriptname.py --windowed --onefile用于终端以生成应用程序。
pyinstaller appname.spec scriptname.py --windowed --onefile
是的,那是Windows路径。在Unix中,请./selenium/webdriver改用。它告诉将chromedriver二进制文件放在包中的位置,因此pyinstall之后,chromedriver将在/path/to/bundle/dist/selenium/webdriver。 然后,在代码中,您应该使用类似的方法来实现它(这是一个远程示例):
./selenium/webdriver
/path/to/bundle/dist/selenium/webdriver
dir = os.path.dirname(__file__) chrome_path = os.path.join(dir, selenium','webdriver','chromedriver.exe') service = service.Service(chrome_path) ...