【发布时间】:2022-07-08 20:13:32
【问题描述】:
简而言之,每当我尝试从命令行protonvpn-cli 或protonvpn-gui 运行时,都会收到类似的错误:RuntimeError: Couldn't find acceptable executables for {'xdg-open'}。
几个小区别:
1) 对于protonvpn-cli,我在执行后立即收到错误;对于protonvpn-gui,界面启动正常,尝试快速连接时出现错误。
2) 对于protonvpn-gui,由于明显的sudo 呼叫,我被要求输入密码。
我该如何解决这个问题?
我在下面发帖:
- 获得的完整错误。
- 关于我的操作系统等的信息。
- 我在 python 中进行的一些调试。
完全错误
对于protonvpn-cli:
$ /usr/bin/protonvpn-cli
Traceback (most recent call last):
File "/usr/bin/protonvpn-cli", line 11, in <module>
load_entry_point('protonvpn-cli==3.11.1', 'console_scripts', 'protonvpn-cli')()
File "/usr/lib/python3/dist-packages/protonvpn_cli/main.py", line 20, in main
from .cli import ProtonVPNCLI
File "/usr/lib/python3/dist-packages/protonvpn_cli/cli.py", line 8, in <module>
from .cli_wrapper import CLIWrapper
File "/usr/lib/python3/dist-packages/protonvpn_cli/cli_wrapper.py", line 9, in <module>
from protonvpn_nm_lib.api import protonvpn
File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/api.py", line 6, in <module>
from .core.report import BugReport
File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/report/__init__.py", line 1, in <module>
from .bug import BugReport
File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/report/bug.py", line 7, in <module>
from ..subprocess_wrapper import subprocess
File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/subprocess_wrapper.py", line 123, in <module>
subprocess = SubprocessWrapper() # noqa
File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/subprocess_wrapper.py", line 34, in __init__
self.__ensure_executables_exist()
File "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/subprocess_wrapper.py", line 81, in __ensure_executables_exist
raise RuntimeError(
RuntimeError: Couldn't find acceptable executables for {'xdg-open'}
对于protonvpn-gui:
$ /home/user1/anaconda3/bin/protonvpn-gui
[sudo] password for user1:
(protonvpn-gui:7452): Gtk-WARNING **: 05:24:59.860: Failed to set text 'traceback (most recent call last):
file "/usr/bin/protonvpn", line 11, in <module>
load_entry_point('protonvpn-gui==1.7.0', 'console_scripts', 'protonvpn')()
file "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 490, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
file "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2854, in load_entry_point
return ep.load()
file "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2445, in load
return self.resolve()
file "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2451, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
file "/usr/lib/python3/dist-packages/protonvpn_gui/main.py", line 16, in <module>
from protonvpn_nm_lib.api import protonvpn
file "/usr/lib/python3/dist-packages/protonvpn_nm_lib/api.py", line 6, in <module>
from .core.report import bugreport
file "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/report/__init__.py", line 1, in <module>
from .bug import bugreport
file "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/report/bug.py", line 7, in <module>
from ..subprocess_wrapper import subprocess
file "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/subprocess_wrapper.py", line 123, in <module>
subprocess = subprocesswrapper() # noqa
file "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/subprocess_wrapper.py", line 34, in __init__
self.__ensure_executables_exist()
file "/usr/lib/python3/dist-packages/protonvpn_nm_lib/core/subprocess_wrapper.py", line 81, in __ensure_executables_exist
raise runtimeerror(
runtimeerror: couldn't find acceptable executables for {'xdg-open'}
' from markup due to error parsing markup: Error on line 27 char 10: Element "markup" was closed, but the currently open element is "module"
操作系统等信息
我正在使用 Bodhi Linux,它是 Ubuntu 的衍生产品,根据我的经验,它在大多数用途(但不是全部)上与 Ubuntu 相同。以至于
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
我在 anaconda3 的 (base) virtualenv 中安装了 protonvpn。
我不是故意这样做的,但这只是.bashrc 的默认行为。
其中一个后果是,由于 protonvpn(至少部分)是一组 python 脚本,其中一些(但不是全部)被安装到 anaconda3 目录。
$ type protonvpn
protonvpn is /home/user1/anaconda3/bin/protonvpn
$ type protonvpn-gui
protonvpn-gui is /home/user1/anaconda3/bin/protonvpn-gui
$ type protonvpn-cli
protonvpn-cli is /usr/bin/protonvpn-cli
我猜这个混淆是问题的一部分
$ ll /home/user1/anaconda3/bin/python3
/home/user1/anaconda3/bin/python3 -> python3.9
$ ll /home/user1/anaconda3/bin/python3.9
/home/user1/anaconda3/bin/python3.9
$ ll /usr/bin/python3.8
/usr/bin/python3.8
在 python 中调试
我用sudo /home/user1/anaconda3/bin/spyder 启动了spyder,然后我打开并调试了/home/user1/anaconda3/bin/protonvpn-gui。
在subprocess_wrapper.py:81中的错误之前设置断点,我发现它需要4个二进制文件(如set_acceptable_binaries中所列):nmcli、xdg-open、clear、systemctl。
dict _path_to_binaries 表明它只找到了其中的 3 个:{ clear: /usr/bin/clear, nmcli: /usr/bin/nmcli, systemctl: /usr/bin/systemctl }。
奇怪的是,在同一个目录中的/usr/bin/xdg-open 没有找到。除非版本有问题。
【问题讨论】:
-
不如新建一个virtualenv,用python3.9作为python。在那个virtualenv下安装protovpn?我对多个 python 版本以及安装 protovpn 东西的不同路径有点困惑。
标签: python anaconda xdgutils protonvpn