pyinstaller 一个文件 --no-console 不起作用 "Fatal Error"
pyinstaller one file --no-console does not work "Fatal Error"
我用 pyinstaller 尝试了 2 个选项,一个有控制台,一个没有。
我正在使用 Windows 10、Python 3.5.4、Windows Chrome 驱动程序 2.33、Selnium 3.6.0 和 Pyinstaller 3.3。
没有控制台的失败:
这是 Test.py
的代码
#!python3
from selenium import webdriver
# Chrome Proxy options and disable the Yellow Bar about Chrome being controlled by Automated Software.
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--disable-logging")
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-default-apps")
chrome_options.add_argument("--disable-extensions")
# load google.com with the proxy settings and a logging path to a file
driver = webdriver.Chrome(r"D:\Selenium\chromedriver_win32\chromedriver.exe", chrome_options=chrome_options)
# maximise window
driver.maximize_window()
driver.get("https://www.google.com/mail")
以下是具有完全相同代码的 pyinstaller 命令:
- 使用控制台 window 又名作品:
pyinstaller -F -i favicon.ico Test.py
- 没有控制台 Window 失败
pyinstaller -F --noconsole -i favicon.ico Test.py
我收到这个错误:
*"Failed to execute script error"*
我不知道为什么。
谢谢
感谢您的回复 我查看了:
C:\Users\testuser\AppData\Local\Programs\Python\Python35\Lib\site-packages\selenium\webdriver\chrome\service.py
这里没有子进程。
我也查了:
C:\Users\testuer\AppData\Local\Programs\Python\Python35\Lib\site-packages\selenium\webdriver\common\service.py
在第 70 行,我添加了 stdin=self.log_file 的条目,因为它丢失了
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdin=self.log_file, stdout=self.log_file, stderr=self.log_file)
使用 pyinstaller 重新创建:
pyinstaller -F --noconsole -i favicon.ico Test.py
这创建了 exe,但是现在控制台 window 出现了....
经过一番搜索,我找到了完整的解决方案:
首先去-
C:\Python35\Lib\site-packages\selenium\webdriver\common\service.py
变化:
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file, stderr=self.log_file)
收件人:
self.process = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=False, creationflags=0x08000000)
现在只需像这样构建您的 app.py:
pyinstaller --noconsole --onefile --noupx Yourfile.py
我希望这对某人有帮助:
C:\Users\%user_name%\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\selenium\webdriver\common
在 "def start" 中添加导入和更改:
从 win32process 导入 CREATE_NO_WINDOW
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdin=self.log_file, stdout=self.log_file, stderr=self.log_file, creationflags=CREATE_NO_WINDOW)
except TypeError:
raise
如果出错,检查pywin32:
pip 安装 pywin32
首先去-
C:\Python35\Lib\site-packages\selenium\webdriver\common\service.py
然后在 def start(self):
def start(self):
""" Starts the Service.
:Exceptions:
- WebDriverException : Raised either when it can't start the service
or when it can't connect to the service
"""
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file,
stderr=self.log_file,
stdin=PIPE,
creationflags=0x08000000)``
只需添加 creationflags=0x08000000 ,我已经在代码中添加了。
creationflags 是一个常量。它会很好地工作。
或者,
您也可以将其替换为 creationflags=CREATE_NO_WINDOW
并添加此行代码 from win32process import CREATE_NO_WINDOW
.
就我而言,第一种方法有效。
我用 pyinstaller 尝试了 2 个选项,一个有控制台,一个没有。
我正在使用 Windows 10、Python 3.5.4、Windows Chrome 驱动程序 2.33、Selnium 3.6.0 和 Pyinstaller 3.3。
没有控制台的失败:
这是 Test.py
的代码#!python3
from selenium import webdriver
# Chrome Proxy options and disable the Yellow Bar about Chrome being controlled by Automated Software.
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--disable-logging")
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-default-apps")
chrome_options.add_argument("--disable-extensions")
# load google.com with the proxy settings and a logging path to a file
driver = webdriver.Chrome(r"D:\Selenium\chromedriver_win32\chromedriver.exe", chrome_options=chrome_options)
# maximise window
driver.maximize_window()
driver.get("https://www.google.com/mail")
以下是具有完全相同代码的 pyinstaller 命令:
- 使用控制台 window 又名作品:
pyinstaller -F -i favicon.ico Test.py
- 没有控制台 Window 失败
pyinstaller -F --noconsole -i favicon.ico Test.py
我收到这个错误:
*"Failed to execute script error"*
我不知道为什么。
谢谢
感谢您的回复 我查看了:
C:\Users\testuser\AppData\Local\Programs\Python\Python35\Lib\site-packages\selenium\webdriver\chrome\service.py
这里没有子进程。
我也查了:
C:\Users\testuer\AppData\Local\Programs\Python\Python35\Lib\site-packages\selenium\webdriver\common\service.py
在第 70 行,我添加了 stdin=self.log_file 的条目,因为它丢失了
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdin=self.log_file, stdout=self.log_file, stderr=self.log_file)
使用 pyinstaller 重新创建:
pyinstaller -F --noconsole -i favicon.ico Test.py
这创建了 exe,但是现在控制台 window 出现了....
经过一番搜索,我找到了完整的解决方案: 首先去-
C:\Python35\Lib\site-packages\selenium\webdriver\common\service.py
变化:
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file, stderr=self.log_file)
收件人:
self.process = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=False, creationflags=0x08000000)
现在只需像这样构建您的 app.py:
pyinstaller --noconsole --onefile --noupx Yourfile.py
我希望这对某人有帮助:
C:\Users\%user_name%\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\selenium\webdriver\common
在 "def start" 中添加导入和更改:
从 win32process 导入 CREATE_NO_WINDOW
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdin=self.log_file, stdout=self.log_file, stderr=self.log_file, creationflags=CREATE_NO_WINDOW)
except TypeError:
raise
如果出错,检查pywin32: pip 安装 pywin32
首先去-
C:\Python35\Lib\site-packages\selenium\webdriver\common\service.py
然后在 def start(self):
def start(self):
""" Starts the Service.
:Exceptions:
- WebDriverException : Raised either when it can't start the service
or when it can't connect to the service
"""
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file,
stderr=self.log_file,
stdin=PIPE,
creationflags=0x08000000)``
只需添加 creationflags=0x08000000 ,我已经在代码中添加了。 creationflags 是一个常量。它会很好地工作。
或者,
您也可以将其替换为 creationflags=CREATE_NO_WINDOW
并添加此行代码 from win32process import CREATE_NO_WINDOW
.
就我而言,第一种方法有效。