PyInstaller打包Selenium脚本为exe后出现configparser.NoSectionError报错求助
解决PyInstaller打包Selenium脚本后exe找不到ini文件的问题
这个报错configparser.NoSectionError: No section: 'settings'本质是打包后的exe找不到你的myini.ini文件——脚本运行时是在当前工作目录读取ini,但PyInstaller默认不会把外部配置文件打包进去,而且exe运行时的工作目录可能和你预期的不一样。
下面给你几个可行的解决方案,按推荐程度排序:
方案1:将ini文件打包进exe(推荐,适合分发)
这个方法能让用户只拿到一个exe文件就能运行,不需要额外复制配置文件。
步骤1:修改脚本,适配打包后的路径
PyInstaller打包后会把资源文件放到临时目录,我们可以通过sys._MEIPASS获取这个路径。修改你的S5.py代码:
import selenium from selenium import webdriver from configparser import ConfigParser import sys import os # 获取资源文件的正确路径 def get_resource_path(filename): if hasattr(sys, '_MEIPASS'): # 打包后的运行环境:从临时目录读取资源 return os.path.join(sys._MEIPASS, filename) # 开发环境:从当前目录读取 return filename parser = ConfigParser() # 用新方法获取ini路径 ini_path = get_resource_path('myini.ini') parser.read(ini_path) A = parser.get('settings', 'company') B = parser.get('settings', 'user') C = parser.get('settings', 'password') D = parser.get('settings', 'system') # 顺便把chromedriver的路径也处理下(如果要分发的话) E = get_resource_path('chromedriver.exe') F = parser.get('settings', 'file1') driver = webdriver.Chrome(E) # 后面代码保持不变...
步骤2:用PyInstaller打包时包含ini文件
打开命令行,运行打包命令(Windows系统):
# 打包成单文件exe pyinstaller --onefile --add-data "myini.ini;." --add-data "chromedriver.exe;." S5.py
如果是Linux/macOS,把路径分隔符换成冒号::
pyinstaller --onefile --add-data "myini.ini:." --add-data "chromedriver.exe:." S5.py
--add-data参数的作用是把指定文件打包进exe,运行时释放到临时目录的根目录(.表示当前目录)。
方案2:手动复制ini文件到exe同目录(快速测试用)
如果只是自己测试,不想改代码,可以:
- 用PyInstaller正常打包生成exe文件
- 找到exe所在的文件夹,把你的
myini.ini复制到同一个文件夹里 - 双击exe就能正常运行了
缺点是分发时需要同时提供exe和ini文件,用户容易弄丢其中一个。
方案3:写死ini文件的绝对路径(不推荐)
你可以把代码里的parser.read('myini.ini')改成绝对路径,比如:
parser.read('C:/Users/john/Desktop/myini.ini')
但这个方法灵活性极差,换个电脑或者移动ini文件的位置就会报错,只适合临时测试,不建议用于分发。
另外提醒下:你的ini里driver是绝对路径,如果要把exe分发给其他用户,最好也把chromedriver打包进去(参考方案1的处理方式),不然其他电脑没有C:/chromedriver/chromedriver.exe这个路径会报找不到驱动的错误。
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

