/usr/bin/python3: 没有名为 pytest 的模块

4

我使用 python3 -m pytest 运行我的测试。在 python3 指向 python3.6 时,这个方法是可用的。我安装了 python3.7 并使用以下命令将其设为默认的 python3:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
sudo update-alternatives --config python3 

我重新安装了所有需要的 Python 3.7 包。但是现在我的测试无法运行了,因为它显示:/usr/bin/python3: No module named pytest。我没有使用虚拟环境,问题也不是关于特定模块的,因为它也找不到其他模块。这应该与 Python 路径有关。在切换 Python 3 版本后,我不知道要更改什么,以便它可以轻松地在 /home/ubuntu/.local/lib/python3.x/site-packages/ 找到所需的模块。

我又切换回 Python 3.6,现在出现了ModuleNotFoundError: No module named 'jsonpath_ng' 的错误,而在切换到 Python 3.7 前它还能正常工作。这是 python3 -m site 的输出:

sys.path = [
    '/home/ubuntu',
    '/usr/lib/python36.zip',
    '/usr/lib/python3.6',
    '/usr/lib/python3.6/lib-dynload',
    '/home/ubuntu/.local/lib/python3.6/site-packages',
    '/usr/local/lib/python3.6/dist-packages',
    '/usr/lib/python3/dist-packages',
]
USER_BASE: '/home/ubuntu/.local' (exists)
USER_SITE: '/home/ubuntu/.local/lib/python3.6/site-packages' (exists)
ENABLE_USER_SITE: True

1
你可能没有使用正确的PIP和正确的Python解释器。尝试运行python3 -m pip install pytest --user(如果要进行系统范围的安装,则可以省略“--user”)。系统的PIP可能仍在使用错误的Python解释器,这可能会解决您的问题。 - Alex Huszagh
1
我运行了该命令,它显示:因为无法写入普通的 site-packages,所以默认使用用户安装 要求已在 /home/ubuntu/.local/lib/python3.7/site-packages (5.3.5) 中满足 pytest... - Fatemeh Hosseini
非常有趣。你可以尝试进入解释器并运行 import pytest,同时运行 import sys; sys.executable 吗? - Alex Huszagh
很抱歉,我希望我能提供更多的帮助。 - Alex Huszagh
这个回答解决了你的问题吗?ModuleNotFoundError: No module named 'pytest' - Adam Strauss
显示剩余9条评论
1个回答

2

感谢@hoefling的帮助,我通过运行python3 -m site找到了问题。我之前是用我的jenkins用户而不是root用户运行测试,但我是为root用户安装所有东西的。因此,对于jenkins用户,USER_SITE实际上并不存在。我再次为jenkins用户安装了所有内容,现在当我使用python3 -m时,它可以找到模块。


很高兴我能帮上忙,尽管最终你自己找到了问题,所以感谢我的地方不多 :-) - hoefling
请问您能否解释一下如何区分Jenkins用户和root用户。我遇到了同样的问题,无法找到解决方法。谢谢。 - nur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接