Python Pyinstaller生成的应用程序未链接到指定的二进制文件(chromedriver)

Python Pyinstaller生成的应用程序未链接到指定的二进制文件(chromedriver),python,selenium,selenium-chromedriver,pyinstaller,Python,Selenium,Selenium Chromedriver,Pyinstaller,按照此处的答案()中的建议更新Pyinstaller规范文件后,仍然无法从生成的应用程序文件访问chromedriver。问题是否与\\selenium\\webdriver有关?这是从答案中复制出来的,我不确定它是否特定于Windows操作系统 在terminal works中运行UNIX可执行文件,访问chromedriver 完整的等级库文件是: # -*- mode: python -*- block_cipher = None a = Analysis([‘scriptname.

按照此处的答案()中的建议更新Pyinstaller规范文件后,仍然无法从生成的应用程序文件访问chromedriver。问题是否与
\\selenium\\webdriver
有关?这是从答案中复制出来的,我不确定它是否特定于Windows操作系统

在terminal works中运行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
在终端中用于生成应用程序。

是的,这是Windows路径。在Unix中,请改用
/selenium/webdriver
。它告诉将chromedriver二进制文件放在捆绑包中的何处,因此在pyinstall之后,chromedriver将位于
/path/to/bundle/dist/selenium/webdriver

然后在代码中,您应该使用类似这样的内容来访问它(这是一个远程示例):


是,'.\\selenium\\webdriver'表示Windows相对路径。它是将chromedriver二进制文件放在包中的位置。在Unix上,它应该是./selenium/webdriver。然而,我尝试在Windows上使用它,它仍然将chromedriver放在那里。生成的捆绑包中是否有包含chromedriver可执行文件的dist/selenium/webdriver目录?但是,运行pyinstaller后,chromedriver可执行文件是否存在于“bundlepath”/dist/selenium目录中?如何在python代码中设置chromedriver?绑定时,您不使用PATH,而是将PATH设置为chromedriver,如下所示(这是一个远程示例):
dir=os.PATH.dirname(\uu文件\uuu)chrome\u PATH=os.PATH.join(dir,'selenium','webdriver','chromedriver.exe')service=service.service(chrome\u路径)如果为“onefile”生成,selenium是否应显示在dist目录中?如果不需要它来运行app/exe文件,那么这很好。chromedriver在代码中被隐式访问,并在路径中工作。如果有可能将chromedriver捆绑到app/exe文件中,我将尝试按照这些思路(验证我可以从PATH中删除chromedriver,并且它仍然有效),也许您可以提交一些内容作为答案。我不知道使用
--onefile
时它应该是什么样子。但有趣的是,当使用
--onefile
运行时,我得到了相同的文件结构。所以在这两种情况下我都有dist/selenium/webdriver目录。(您是否尝试过不使用
--onefile
?)因此,如果您在代码中从selenium导入webdriver,是的,selenium dir应该显示在dist中。我发现了这一点,也许您应该在onefile案例中遵循它。chromedriver正在捆绑,但我没有正确访问它在应用程序中的位置。您上面提到的代码行使用了
dir=os.path.dirname(\uuuu文件\uuuu)chrome\u path=os.path.join(dir,'selenium','webdriver','chromedriver.exe')service=service.service(chrome\u路径)
。我只需要使用resource_path()访问路径,并将路径传递到webdriver.Chrome()。如果您愿意,可以将其添加为答案。
dir = os.path.dirname(__file__)
chrome_path = os.path.join(dir, selenium','webdriver','chromedriver.exe')
service = service.Service(chrome_path) ...