【问题标题】:Python conda env does not contain local package when using sudo使用 sudo 时 Python conda env 不包含本地包
【发布时间】:2021-05-04 13:33:38
【问题描述】:

我正在使用 conda 环境和一些使用 pip install -e 安装的本地软件包。

有时我需要以 root 身份运行脚本。这样做时,我明确使用 conda 环境,但它找不到我的本地包。不使用sudo 时,一切正常。

$ /path/to/env/bin/python -c "import my_module" --> works fine
$ sudo /path/to/env/bin/python -c "import my_module"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'

我也尝试过像这样持久化环境:

$ sudo -E /path/to/env/bin/python -c "import my_module"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'

设置:

  • Ubuntu 18.04
  • python 3.7.10

【问题讨论】:

  • 环境激活了吗?
  • 我在调用 Python 或像 /path/to/env/bin/python|pip 这样的 pip 时直接引用环境,所以这不应该是问题,根目录的 python/pip 链接也不会出现任何意外
  • 激活环境时还会发生其他一些事情,但我不确定这是否是这里问题的一部分。

标签: python pip conda sudo


【解决方案1】:

Python(或您的情况下为 Anaconda)在您的计算机上几乎没有不同的环境,以用户身份安装软件包时,它们可能安装在 ~/.local/python/... 上,而以 root 身份安装时,它们安装在 /var/lib/python/... 上。

当您以用户身份运行 python 并导入一个包时,我们将在包括本地目录在内的多个位置进行查找。
但是当以 root 身份运行 python 时,它不会在这些地方查找..

最简单的解决方案是使用sudo 安装这些软件包,或者开始使用venv,强烈推荐。

【讨论】:

  • 使用venv 有什么好处?它似乎还需要使用 sudo 安装软件包才能从 root 访问它们,还是我需要以不同的方式设置 venv?
  • 您可以使用venv为每个项目创建一个单独的环境,然后当您激活它时,您就会知道通过它安装的所有内容在运行python时都可以使用,并且您不需要安装任何东西在里面。你可以在这里阅读更多内容stackoverflow.com/questions/41972261/…
  • @Mogi 您可以使用 venv 为每个项目创建单独的环境 这将实现与 Conda 相同的目的。
  • @ConstantinB This question 似乎与茂木所说的有关。
  • This other question 也可能有用。
猜你喜欢
  • 2018-10-19
  • 2019-07-09
  • 2021-11-11
  • 2016-06-12
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多