add-apt-repository ppa:graphics-drivers/ppa 报错 AttributeError: ‘NoneType’ object has no attribute ‘people’ 解决方法
当我在尝试在 Debian 12 系统上安装Nvidia 驱动的时候遇到了问题,有说要增加一下驱动源的,但是我运行标题的命令总是报错:
Traceback (most recent call last):File "/usr/bin/add-apt-repository", line 362, in <module>sys.exit(0 if addaptrepo.main() else 1)^^^^^^^^^^^^^^^^^File "/usr/bin/add-apt-repository", line 345, in mainshortcut = handler(source, **shortcut_params)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/lib/python3/dist-packages/softwareproperties/shortcuts.py", line 40, in shortcut_handlerreturn handler(shortcut, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 86, in __init__if self.lpppa.publish_debug_symbols:^^^^^^^^^^File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 126, in lpppaself._lpppa = self.lpteam.getPPAByName(name=self.ppaname)^^^^^^^^^^^File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 113, in lpteamself._lpteam = self.lp.people(self.teamname)^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'people'
网上的报错都是找不到 add-apt-repository
这个东西,而我是脚本里的代码有问题。试来试去没办法只能自己 vim /usr/lib/python3/dist-packages/softwareproperties/ppa.py
来探索原因。
很明显出错原因是这里返回了 None
,102 行加个输出测试一下果然是:
100 def lp(self):
101 if not Launchpad:
102 print("There are no Launchpad")
103 return None
104 if not self._lp:
105 if self._lp_anon:
106 login_func = Launchpad.login_anonymously
107 else:
108 login_func = Launchpad.login_with
109 self._lp = login_func("%s.%s" % (self.__module__, self.__class__.__name__),
110 service_root='production',
111 version='devel')
112 return self._lp
接下来搜索变量 Launchpad
一看是在最上面定义的一个异常处理,虽然不清楚为什么要处理一下,明明下面还是会报错,但是确实是导包失败导致的 None
:
37 try:38 from launchpadlib.launchpad import Launchpad39 except ImportError as e:40 print(f"Import Launchpad error: {e}")41 Launchpad = None
奇怪的是我 pip list
或者 pip install launchpadlib
都告诉我我已经安装了这个包,而且直接在命令行:
└─(09:56:02)──> python 1 ↵ ──(一,7月31)─┘
Python 3.10.6 (main, Jul 27 2023, 17:48:16) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import launchpadlib
>>> exit()
测试也是能成功导包的,那么经过我长时间的经验一定是版本导向什么的问题,总之解决方法就是在 ppa.py
个文件里强行连接一下 launchpadlib
的库文件。
解决方法
首先 find / | grep launchpadlib
找到这个库文件的位置,果然不在 python
下面,而是在 python3.10
下面
虽然我这系统里 python python3 python3.10 都是同一个版本,但是不知道为什么有奇怪的隔离
最后解决方法就是把库文件的路径加入到 ppa.py
文件中开头的位置:
23 import sys24 sys.path.append(r'/usr/local/lib/python3.10/site-packages/')
再次运行 add-apt-repository ppa:graphics-drivers/ppa
就没有上面的报错了。