Conda 环境中出现意外的 Python 路径

2024-04-01

在 Conda 环境中(base在这里),我对 Python 路径中的目录顺序感到惊讶:

python -c "import sys; print(sys.path)"
['', 
'/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python37.zip',
'/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python3.7',
'/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python3.7/lib-dynload',
'/export/home/db291g/.local/lib/python3.7/site-packages',
'/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python3.7/site-packages']

如您所见,我本地的非 Conda 路径:

/export/home/db291g/.local/lib/python3.7/site-packages

出现在 Conda 对应项之前:

/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/lib/python3.7/site-packages

这意味着Python包安装在miniconda3/lib/python3.7/site-packages如果它们也出现在.local/lib/python3.7/site-packages。事实上,在.local/lib/python3.7/site-packages I have numpyv1.20,但在Conda环境中我需要v1.19,它已正确安装,但被v1.20取代。这似乎违背了使用 Conda 的意义。

我的配置有问题还是我在这里遗漏了一些东西?

一些信息:

which python
/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/bin/python

python -V
Python 3.7.12

which conda
/export/projects/III-data/wcmp_bioinformatics/db291g/miniconda3/bin/conda

conda --version
conda 4.11.0

这是预期的行为(请参阅PEP 370 https://www.python.org/dev/peps/pep-0370/)以及部分原因Anaconda 建议不要安装用户级包 https://www.anaconda.com/blog/using-pip-in-a-conda-environment.

The site module https://docs.python.org/3/library/site.html#module-site负责设置sys.path当Python初始化时。代码在site.py https://github.com/python/cpython/blob/e480def027b68a570dc0c2e235463842373dc741/Lib/site.py#L603在附加前缀站点之前专门附加用户站点,这就是导致这种优先级的原因。动机根据PEP 370 https://www.python.org/dev/peps/pep-0370/是用户将在系统级别安装Python,但希望优先考虑在用户级别安装的包,因此用户站点应在前缀站点之前加载。

Options

有多种选项可以避免加载用户级站点包。

1:环境变量

环境变量PYTHONNOUSERSITE将切换用户级别的加载site-packages。即,

PYTHONNOUSERSITE=1 python -c "import sys; print(sys.path)"

2:Python-s flag

或者,Python 二进制文件有一个-s专门禁用用户级站点包的参数。

python -s -c "import sys; print(sys.path)"

3:删除(并避免将来)用户级安装

康达建议 https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#using-pip-in-an-environment是为了避免pip install --user完全,这将被解释为应该删除~/.local/lib/python*系统中的文件夹。

4:自动化Conda环境变量

康达锻造包

Conda Forge 包conda-ecosystem-user-package-isolation https://github.com/conda-forge/conda-ecosystem-user-package-isolation-feedstock会自动设置PYTHONNOUSERSITE=1在环境激活期间。

如果您希望所有环境默认都具有这种隔离,请考虑将其添加到create_default_packages配置清单:

conda config --add create_default_packages conda-ecosystem-user-package-isolation

请注意,这个包还设置了R_LIBS_USER="-",将任何 R 环境与用户级包隔离。

替代套餐

如果您想要更精细的选项,我还创建了单独的包,仅设置PYTHONNOUSERSITE=1 https://github.com/mfansler/envvar-pythonnousersite-true and PYTHONPATH="" https://github.com/mfansler/envvar-pythonpath-null环境变量,可以通过以下方式安装:

## set PYTHONNOUSERSITE=1
conda install merv::envvar-pythonnousersite-true

## clear PYTHONPATH
conda install merv::envvar-pythonpath-null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Conda 环境中出现意外的 Python 路径 的相关文章

随机推荐

  • 将带有各种分隔符的地址拆分为街道地址、城市、州、邮政编码和国家/地区

    我的数据在 Excel 中 我有几张数据 其中地址始终位于每张数据的同一列中 地址格式的示例包括 1155 15th Street NW Suite 600 华盛顿特区 20005 美国4600 Empire Blvd 200 达勒姆 NC
  • 如何存储单个浏览器选项卡/窗口的状态?

    我正在开发一个单页 jQuery 和 Backbone js Web 应用程序 后端是 JBoss 6 应用程序服务器 到目前为止 我们的结构如下 只有一个servlet 前端控制器 来自 JavaScript 客户端的每个请求都会经过这里
  • 在 Emacs 中如何重新映射键?

    我正在寻找一种方法 可以在 emacs 窗口中切换控制键和大写锁定键 但是当我转到任何其他程序 例如 Firefox 时 我希望能够在新窗口中使用普通控制按钮 选项卡等 附加信息 我正在使用 Ubuntu 但所有系统的答案都很好 因为其他人
  • iOS:保存双重选择器的设置(数据持久性)

    所以我有一个双重选择器 用户可以将每个轮子设置为他们想要的 然后按下一个按钮来显示他们的选择 简单干净 但我想存储这些数据以供以后使用 以便在关闭应用程序并再次重新打开它后它不会消失 现在 我知道如何使用 datePicker 来做到这一点
  • 如何在 CmdletBinding() 脚本中定义函数?

    我正在编写一个脚本 我想使用 PowerShell 的 CmdletBinding 有没有办法在脚本中定义函数 当我尝试时 PowerShell 抱怨 表达式或语句中出现意外的 token 函数 这是我正在尝试做的事情的一个简化示例 Cmd
  • 如何让 GDB 打印 64 位变量?

    我正在使用 GDB 来调试用以下代码组装的代码 nasm felf64 Fdwarf 当我想检查标签符号的值时 比如说 var h dq 1 using print var h GDB 假设该值是 32 位并且只给我最低的 4 个字节 x
  • 32 位操作系统上的 JVM 堆大小

    我使用的是 32 位 win 7 并使用 Eclipse 还有 4GB 内存 我想为我的 java 应用程序分配大约 3 GB 的最大堆大小 但我可以通过 VM 参数分配最大 1 5GB Xmx1056m 我应该怎么办 如果我安装64位wi
  • ng --version 显示 Angular 不支持当前版本的 Node (16.8.0)

    我刚刚安装了最新版本节点 16 8 using nvm and 角度 cli 12 2 但当我跑步时ng version 它显示以下内容 警告 Angular 不支持当前版本的 Node 16 8 0 我尝试降级节点并安装节点 14 15
  • 提交带有请求的表单未通过

    我真的尝试过自己解决这个问题 但我是 pyhon 的新手 所以我无法做到这一点 我一直在尝试为我使用的网站制作一个机器人 并且我正在尝试使用请求库来做到这一点 到目前为止 我的目标非常简单 登录并回复主题 我已经能够通过网络表单登录 但在通
  • 如何使用 Terraform 创建不具有代入角色策略的 AWS IAM 角色?

    使用 AWS MediaConvert 时 说明提供了示例 IAM 政策 https docs aws amazon com mediaconvert latest ug example inline policy kms decrypt
  • 如何最大化 UWP 窗口(非全屏)

    如何使用 C 最大化 UWP 项目中的窗口 不是全屏 我尝试使用窗口边界作为参数的 TryResizeView 方法 但没有任何反应 Thanks 目前在 UWP 中这是不可能的 所以 我无法让你最大化 但我可以让你非常接近 var av
  • Ansible、瞻博网络 CLI 命令。超时错误?

    我正在尝试将我用 Python 编写的自动化脚本传输到 ansible 公司请求 但我以前从未使用过 ansible 我已经尝试过 wait for 但我也没有让它发挥作用 在脚本中 我可以设置 dev timeout None 或我需要的
  • Bower/bower-asset 在 yii2 等 php 应用程序中扮演什么角色

    最近我部署了一些项目 例如trntv yii2 starter kit https github com trntv yii2 starter kit 等等 但所有应用程序都在 vendor bower 而不是 vendor bower b
  • 使用 XSLT 在字符串/子字符串中的每个实例之后进行选择

    我正在尝试编写一个 XSLT 样式表 该样式表将处理 Dublin Core XML 编目记录并为每本书创建芝加哥 APA 和 MLA 版本的引文 除了 APA 作者的问题之外 我一切都进展顺利 APA 的作者风格需要作者的姓氏 完成 逗号
  • 最佳实践:显示通过多行文本框输入的文本

    我有一个多行文本框 当用户简单地键入时 文本框会包裹文本 并将其保存为单行 用户也可能输入换行符 例如在输入 项目符号 列表时 例如 Here are some suggestions fix this remove that and an
  • 将数据传递到 Rails 部分

    编辑 解决方案完美运行 dom id http api rubyonrails org classes ActionController RecordIdentifier html 我正在尝试将数据传递给部分数据并使用它来更改用户的角色 目
  • 如何使用支持库修复缩放的 FloatingActionButton 上的阴影 23

    我在使用支持库 23 的 KitKat 设备上有一个 FAB 我正在缩放按钮以获得过渡效果 通过将其包含在调整大小的视图中 这基本上与阴影不同 阴影以一种奇怪的形式出现 参见屏幕截图中缩放的红色按钮 蓝色按钮是全尺寸 实际发生的情况是 阴影
  • C# 验证 CRL 列表中的证书

    如何以编程方式检查某个证书是否已从其 CA CRL 列表中撤销 我正在这样做 X509Chain ch new X509Chain ch ChainPolicy RevocationMode X509RevocationMode Onlin
  • SoapFaultMappingExceptionResolver 永远不会遇到常规 java 异常

    谁能告诉我为什么我无法使用解析器捕获常规 Java 异常 以便我可以在响应发回之前对其进行转换 它永远不会遇到断点 如果不可能 我该怎么办 SoapFaultMappingExceptionResolver public class Lis
  • Conda 环境中出现意外的 Python 路径

    在 Conda 环境中 base在这里 我对 Python 路径中的目录顺序感到惊讶 python c import sys print sys path export projects III data wcmp bioinformati