安装syncal pip3 install 'syncall[caldav, tw]'
khal后不再起作用:
错误信息:
yoga-x1:~$ **khal**
Traceback (most recent call last):
File "/usr/bin/khal", line 2, in <module>
from khal.cli import main_khal
File "/usr/lib/python3/dist-packages/khal/cli.py", line 35, in <module>
from .settings import InvalidSettingsError, get_config
File "/usr/lib/python3/dist-packages/khal/settings/__init__.py", line 1, in <module>
from .settings import get_config # noqa
File "/usr/lib/python3/dist-packages/khal/settings/settings.py", line 26, in <module>
import xdg.BaseDirectory
ModuleNotFoundError: No module named 'xdg.BaseDirectory'
当前的Python版本: Python 3.10.12
卡哈需要: Python 3.8+
我怎样才能解决这个问题?
答案1
问题
您安装了相同库的多个版本。首选安装程序(又名pip
)已尝试安装它自己的 版本xdg
,但无法安装,因为apt
它已正确干预并建议您 Ubuntu 拥有自己的一组全局可用库。 实际上/usr/lib/python-3/dist-packages (0.27)/
,您现在有两个相互竞争的包管理器,并且包管理器试图安装相同的库。发生这种情况时,需要这些库的应用程序会感到困惑,因为它们试图寻找与已安装的库相反的库。
为了解决这个问题,我们需要卸载一切如果需要,修复apt pip
,通过 apt 安装多个 Python 版本,然后在它自己的环境中正确重新安装 pip,pipenv
并在该环境中正确安装pip
软件包。
使固定
因此,如果我们将我的修复列表分成可管理的部分,那就是:
pip
连同其所有软件包一起卸载。- 对它和操作系统进行健全性检查
apt
并修复,以防pip
安装的任何东西损坏了某些东西。- 检查 Ubuntu 存储库是否有我们删除时卸载的任何软件包
pip
- 如果我们发现任何软件包,请安装软件包
- 检查 Ubuntu 存储库是否有我们删除时卸载的任何软件包
- 执行Python的版本检查,并使用正确添加3.x版本死蛇 PPA
- 通知操作系统我们想要使用新的 3.x 版本的 Python
update-alternatives
- 通知操作系统我们想要使用新的 3.x 版本的 Python
pip
从 正确安装apt
。- 创建一个单独的环境,
pipenv
以便 APT 安装的 Python 版本中的库不会与 PIP 安装的版本“冲突”。
修复包括命令
请注意,这是我解决您问题的方法。可能有更简化的方法,但我更喜欢扭转已经完成的事情,所以我们从头开始,然后从那里开始工作。
- 删除所有安装的软件包
pip
:选择您选择的删除方法如何删除 pip 安装的所有软件包?或者如何使用 Pip 一次性卸载所有 Python 包?。 - 由于我们可能还删除了 APT 监控的软件包,让我们看看是否需要重新安装任何东西:
sudo apt update --fix-missing
笔记:我们希望它根本不返回任何结果。此命令执行存储库更新并跳过任何损坏的**
- 如果上述命令返回除正常更新输出之外的列表,则问题:
sudo apt install -f
。
笔记:使用不带软件包名称的 -f 会扫描系统上所有已安装的软件包,尝试解析修复所有损坏/卸载项目的安装选项。
- 使用以下命令添加之前链接的 Deadsnakes PPA:
sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt update
笔记: 这一步是选修的但推荐。
- 创建一个 python
virtualenv
以将安装的 python 包和 python 库pip
与主机操作系统上安装的 python 库和 python 包分开。请参阅Python 用户手册:venv 笔记: venv 需要 >=Python 3.3
边注
我相信您尝试使用的大多数软件包都khal
可以通过以下方式获得,apt
这意味着它们将通过操作系统安装的 python 进行管理和使用。使用apt search
来找到他们