Conda使用`.local`包

7

我觉得这是一个基础问题,如有需要,请随时指导我参考任何资源:

我的conda环境在本地存在任何包的情况下,会使用`.local`而不是yaml文件中指定的包版本。如果可能的话,我该如何忽略`.local`呢?

我正在使用PyCharm和Ubuntu。

如果需要更多信息,请告诉我。

1个回答

9
我认为所有的Python解释器在使用任何其他包之前都会使用site.USER_SITE中的包,而默认情况下该位置是~/.local/lib/pythonX.Y/site-packages. 这是因为site.USER_BASE默认为~/.local
但幸运的是,你可以通过环境变量PYTHONUSERBASE来覆盖site.USER_BASE的值。由于你想要完全禁用它,应该提供一个非空的无意义值。例如:
$ export PYTHONUSERBASE=intentionally-disabled
$ python -c "import site; print(site.USER_SITE)"
intentionally-disabled/lib/python3.7/site-packages

文档:

为确保每次使用 conda 环境时都设置了该变量,您可以在 ${CONDA_PREFIX}/etc/conda/activate.d/ 中创建一个后激活 shell 脚本,具体步骤请参见此答案

cat > ${CONDA_PREFIX}/etc/conda/activate.d/disable-PYTHONUSERBASE.sh << EOF
#!/bin/bash
export PYTHONUSERBASE=intentionally-disabled
EOF

chmod +x ${CONDA_PREFIX}/etc/conda/activate.d/disable-PYTHONUSERBASE.sh

说实话,我认为最简单的选项是永远不要使用~/.local存储Python包。只需将其移动或删除即可。这会导致像这样的问题。只有在它引起问题时我才遇到过它--我从未见过任何人真正受益于使用那个Python功能。我希望他们默认情况下禁用它。


编辑:如果你的IDE允许你指定传递给Python本身的标志,那么你可以使用python -s选项


感谢您的出色回答!我已经实现了您的解决方案,但是还需要在我的PyCharm运行配置中添加PYTHONUSERBASE作为用户定义的环境变量,因为它们没有PYTHONUSERBASE,尽管conda环境的终端有。您不建议删除~/.local,对吗?只需删除其中安装的软件包即可。我想删除该文件夹可能会引起问题。 - Python Developer
1
嗯,是的,我想那是最好的。说实话,我不太清楚~/.local的用途。这个答案声称它不仅仅是为Python而存在的。 - Stuart Berg
我猜更好的解决方案是设置 PYTHONNOUSERSITE(参见https://docs.python.org/3/using/cmdline.html#envvar-PYTHONNOUSERSITE),它具有与 python -s 相同的效果(https://docs.python.org/3/library/site.html#site.ENABLE_USER_SITE),而不是将 PYTHONUSERBASE 设置为一些无意义的值。 - Stefan

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