Autojump: 新软件包版本未找到模块错误

创建于 2019-11-22  ·  22评论  ·  资料来源: wting/autojump

我将 autojump 升级到 22.5.3-3 版本,当使用 cd 或 j 时,我收到此错误:

Traceback (most recent call last):                                                                 
  File "/usr/bin/autojump", line 39, in <module>
    from autojump_argparse import ArgumentParser
ModuleNotFoundError: No module named 'autojump_argparse'

我把它降级到 22.5.3-1 版本,它工作正常。
我正在使用 Arch Linux。

最有用的评论

我在将python3.8升级到python3.9时遇到了这个问题,所以我只是将python3.8中的一些autojump包复制到python3.9中,我就解决了这个问题。

cp /usr/lib/python3.8/site-packages/autojump* /usr/lib/python3.9/site-packages/

所有22条评论

在 manjaro 上也一样 :(
操作系统:Manjaro 18.1.3 Juhraya
内核:x86_64 Linux 5.3.11-1-MANJARO

在 Manjaro 上发现相同的:

Linux version 5.3.11-1-MANJARO
DISTRIB_ID=ManjaroLinux
DISTRIB_RELEASE=18.1.3
DISTRIB_CODENAME=Juhraya
DISTRIB_DESCRIPTION="Manjaro Linux"

通过使用yay删除autojump yay并使用相同的干净构建重新安装来修复该行为。

这解决了在为zsh重新采购我的配置文件后的行为。

这里还有 Manjaro 18.1.3。 删除并重新安装autojump包对我不起作用。 重新安装失败

==> Error: Could not find all required packages:
    python>=3.8 (Wanted by: autojump)

我的python版本确实是3.7.4。

autojump-git现在似乎可以工作。

我通过 AUR 维护 Arch Linux 的自动跳转包。

  • 22.5.3-5 包含一个版本化的 python 依赖项,并结合了 hefteg 在FS# 60929 中建议的解决方案
  • 22.5.3-1 没有这个移动到站点包

我想知道模块未找到错误的原因是否是由于实施了hefteg的修复。

我在 Arch 上使用 zsh 并且没有遇到这种情况,所以@tmarti2 -

  1. 你是用 makepkg 还是一些 AUR 助手构建的(不要使用 AUR 助手)?
  2. 您的~/.zshrc或任何 zsh 文件中是否有任何内容引用或采购任何用于自动跳转的内容?

Manjaro 用户:知道Manjaro != Arch ...基于@Syphdias评论,您的 Python 版本落后于 Arch,这就是您无法安装的原因。

您可以将 PKGBUILD 中的depends=_python=更改python3.7并重建,它应该适合您。

是的,我在 Manjaro 之下,我的错。
我正在使用 Yay,我很确定我在 .zshrc 中有一行提到自动跳转,但我不记得是什么。
我明天试试。

我假设yay是一个 AUR 助手。 它们造成的问题多于解决的问题。 正如我提到的那样修改 PKGBUILD 并使用makepkg构建,我认为你会没事的......可能会关闭这个问题,因为它与上游无关。

这里还有 Manjaro 18.1.3。 删除并重新安装autojump包对我不起作用。 重新安装失败

==> Error: Could not find all required packages:
    python>=3.8 (Wanted by: autojump)

我的python版本确实是3.7.4。

autojump-git现在似乎可以工作。

Autojump-git 现在在 Manjaro 上也被破坏了。 不要升级或安装。

@pwoehrer -

Manjaro 用户:知道 Manjaro != Arch ...基于@Syphdias评论,您的 Python 版本落后于 Arch,这就是您无法安装的原因。 您可以将 PKGBUILD 中的 depends= 和 _python= 更改为 python3.7 并重建,它应该适合您。

AUR pkg 安装完全错误。 所需的模块安装在 ../lib/python3.8/site-packages 之外的 usr/lib/site-packages 文件夹中。

@noelar - /usr/lib/python3.8/site-packages/是这些的正确位置。 参见: https :

如果我错了,请随时纠正我。

Graysky2 是正确的:安装库的位置确实是 site-packages 目录。 但...

这样的自动跳转只需要 python >= 2.6。 是否有令人信服的理由强制 >= 3.8?

如果没有,我建议通过执行以下操作来获取系统的正确 python 版本:

depends=('python>=2.6`)
_python=python${/usr/bin/env python -V | grep -Po '\d+\.\d+'}

这将消除在准备部分弄乱包的需要,并为系统使用正确的路径。

将 python 版本强制为 3.8 会破坏每个系统(Arch 以及衍生产品)的包,这些系统由于某种原因不能或不能使用最新版本的 python。 此外,一旦随 Arch 一起发布的版本再次更改,该软件包就会被破坏。

免责声明:我既不是程序员也不是包维护者,所以我所说的部分或全部内容可能完全是无稽之谈,或者可能有更简洁或更优雅的方法来实现相同的目标。

我喜欢这个想法,但如果我只在构建机器与客户端机器具有相同版本的 python 时才有效。 换句话说,您可以在具有 3.8 (Arch) 的机器上构建,然后安装在当前的 Manjaro (3.7) 上。 假设 3.7 与 3.8 没有区别,它只会有一个额外的目录....

有谁知道实际上是否存在差异,即针对 python3.8 构建的 autojump 是否可以在使用 python3.7 的系统上工作?

非版本化的/usr/lib/python/site-packages/可以接受的还是因为我在上面询问的原因而进行了版本化?

我绝不是python专家,所以也许我不明白确切的问题。

从 autojump 来看,它是纯 python(以及一些 shell 风格,但这不应该是重点)。 PKGBUILD 中的编译语句为库生成中间字节码 (*.pyc)(据我所知,这些代码依赖于版本,但如果版本不匹配,则在运行时无论如何都会被丢弃)。 通常字节码是预先生成的,以使没有写权限的用户也能从加速中受益。
考虑到无论如何安装都需要写入权限,在安装时生成库的字节码对我来说是有意义的,而不是在构建时。

autojump 的python 源代码是这样写的,所以它不关心可用哪个版本的python 解释器,只要>= 2.6 即可。

但同样:不是专家,只是喜欢自动跳转和涉足 python。

这里也有 Manjaro,

就像@graysky2说的,

1. wget https://aur.archlinux.org/cgit/aur.git/snapshot/autojump.tar.gz
2. tar -xzvf autojump.tar.gz
3. cd autojump && vim PKGBUILD

# depends=('python>=3.7')
# _python=python3.7
4. replace all the 3.8 to 3.7
5. makepkg
6. sudo pacman -U autojump-22.5.3-5-any.pkg.tar.xz

我想那没问题。

@pwoehrer - 问题是需要针对主要的 Python 版本(即 3.6 到 3.7 或 3.7 到 3.8)重建它。 如果它在官方存储库中,维护者只会修改pkgver并更改_python变量,但由于它是 AUR,我必须使用版本化的 python3 dep 强制它。

如果有更聪明的方法来保持一致性,请与我分享。

例如,如果您针对 python v3.7.x 构建 autojump,您将获得:

% pacman -Ql autojump                                                                                       
...
autojump /usr/lib/python3/site-packages/__pycache__/autojump_argparse.cpython-37.opt-1.pyc
autojump /usr/lib/python3/site-packages/__pycache__/autojump_argparse.cpython-37.pyc
autojump /usr/lib/python3/site-packages/__pycache__/autojump_data.cpython-37.opt-1.pyc
autojump /usr/lib/python3/site-packages/__pycache__/autojump_data.cpython-37.pyc
autojump /usr/lib/python3/site-packages/__pycache__/autojump_match.cpython-37.opt-1.pyc
autojump /usr/lib/python3/site-packages/__pycache__/autojump_match.cpython-37.pyc
autojump /usr/lib/python3/site-packages/__pycache__/autojump_utils.cpython-37.opt-1.pyc
autojump /usr/lib/python3/site-packages/__pycache__/autojump_utils.cpython-37.pyc
...

恐怕只要把编译好的*.pyc包在里面,就没有办法做到这一点。 但正如我之前所说,实际上没有必要将它们包含在包中。 最好在安装时生成它们,因为它们将使用系统的 python 版本并且它们是平台无关的。 *.pc 是在第一次运行库时创建的。

此外,它们并不是自动跳转功能所必需的,它们只是在用户对 site-package 目录没有写权限的系统上提供一些加速。

所以:不,如果他们 *.pyc 需要包含在包中,我认为没有更好的方法。 :-(

FS#60929 中概述了不这样做的问题

如果我们在编译语言中实现自动跳转,我们就不必担心此类问题。 我用Go重写了,用了很久了,也许你想试一试。 (https://github.com/suzaku/shonenjump)

我在将python3.8升级到python3.9时遇到了这个问题,所以我只是将python3.8中的一些autojump包复制到python3.9中,我就解决了这个问题。

cp /usr/lib/python3.8/site-packages/autojump* /usr/lib/python3.9/site-packages/

我在将python3.8升级到python3.9时遇到了这个问题,所以我只是将python3.8中的一些autojump包复制到python3.9中,我就解决了这个问题。

cp /usr/lib/python3.8/site-packages/autojump* /usr/lib/python3.9/site-packages/

你可以试试我的工具,它可以用brew轻松安装。

@heppen - 您必须像在主要版本碰撞上的任何 python 脚本一样重建。

此页面是否有帮助?
0 / 5 - 0 等级