在编译的 python exe 中使用 Tshark
Using Tshark in compiled python exe
我有一个有效的 python 脚本,它使用并导入了 pyshark,因此也导入了 tshark。
只要我运行代码通过pycharm,一切都很好。一用pyinstaller编译就报错:
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter\__init__.py", line 1921, in __call__
File "main.py", line 458, in get_pdu_ids
File "pyshark\capture\capture.py", line 232, in _packets_from_tshark_sync
File "asyncio\base_events.py", line 646, in run_until_complete
File "pyshark\capture\capture.py", line 396, in _get_tshark_process
File "pyshark\capture\capture.py", line 373, in _get_tshark_path
File "pyshark\tshark\tshark.py", line 30, in get_process_path
File "configparser.py", line 782, in get
File "configparser.py", line 1153, in _unify_values
configparser.NoSectionError: No section: 'tshark'
我尝试使用此修复程序,它现在也应该合并到 pyshark 中,但它没有改变任何东西:https://github.com/KimiNewt/pyshark/issues/245
当然一切都是最新的。
注意:每个其他导入的模块都可以完美运行,例如scapy.
提前致谢!
我找到了解决方案,将其张贴在这里以帮助其他人遇到同样的错误:
我不得不 hard-code 以下内容,因为编译后的程序没有得到正确的变量(不知道为什么):
文件:\venv\Lib\site-packages\pyshark\capture\capture.py
def _get_tshark_path(self):
return get_process_path(self.tshark_path)
至
def _get_tshark_path(self):
return r"C:/Program Files/Wireshark/tshark.exe"
这是一个肮脏的解决方案,不是解决问题而是绕过问题,但它有效,我还是想分享它。
我有一个有效的 python 脚本,它使用并导入了 pyshark,因此也导入了 tshark。
只要我运行代码通过pycharm,一切都很好。一用pyinstaller编译就报错:
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter\__init__.py", line 1921, in __call__
File "main.py", line 458, in get_pdu_ids
File "pyshark\capture\capture.py", line 232, in _packets_from_tshark_sync
File "asyncio\base_events.py", line 646, in run_until_complete
File "pyshark\capture\capture.py", line 396, in _get_tshark_process
File "pyshark\capture\capture.py", line 373, in _get_tshark_path
File "pyshark\tshark\tshark.py", line 30, in get_process_path
File "configparser.py", line 782, in get
File "configparser.py", line 1153, in _unify_values
configparser.NoSectionError: No section: 'tshark'
我尝试使用此修复程序,它现在也应该合并到 pyshark 中,但它没有改变任何东西:https://github.com/KimiNewt/pyshark/issues/245
当然一切都是最新的。
注意:每个其他导入的模块都可以完美运行,例如scapy.
提前致谢!
我找到了解决方案,将其张贴在这里以帮助其他人遇到同样的错误:
我不得不 hard-code 以下内容,因为编译后的程序没有得到正确的变量(不知道为什么):
文件:\venv\Lib\site-packages\pyshark\capture\capture.py
def _get_tshark_path(self):
return get_process_path(self.tshark_path)
至
def _get_tshark_path(self):
return r"C:/Program Files/Wireshark/tshark.exe"
这是一个肮脏的解决方案,不是解决问题而是绕过问题,但它有效,我还是想分享它。