Conda 环境中的意外 Python 路径

2024-12-20 08:37:00
admin
原创
69
摘要:问题描述:在 Conda 环境中(base此处),我对 Python 路径中的目录顺序感到惊讶:python -c "import sys; print(sys.path)" ['', '/export/projects/III-data/wcmp_bioinformatics/db29...

问题描述:

在 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

这意味着miniconda3/lib/python3.7/site-packages如果在 中也发现了 Python 包,则会忽略安装在 中的 Python 包.local/lib/python3.7/site-packages。事实上,在 中.local/lib/python3.7/site-packages我有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

解决方案 1:

这是预期的行为(参见PEP 370),也是Anaconda 建议不要进行用户级包安装的部分原因。

site模块负责sys.path在 Python 初始化时设置。代码中site.py特别在附加前缀站点之前附加用户站点,这就是导致这种优先级的原因。根据PEP 370 的动机是,用户会在系统级别安装 Python,但希望优先考虑在用户级别安装的软件包,因此用户站点应该在前缀站点之前加载。

选项

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

1:环境变量

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

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

2:Python-s标志

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

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

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

Conda 的建议是完全避免pip install --user,这意味着应该~/.local/lib/python*从系统中删除文件夹。

4:自动化 Conda 环境变量

Conda Forge 软件包

Conda Forge 包conda-ecosystem-user-package-isolation将在环境激活期间自动设置PYTHONNOUSERSITE=1

如果您希望所有环境默认具有这样的隔离,那么请考虑将其添加到create_default_packages配置列表中:

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

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

替代软件包

如果您想要更细致的选项,我还创建了单独的包,仅设置PYTHONNOUSERSITE=1PYTHONPATH=""环境变量,可以使用以下命令安装:

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

## clear PYTHONPATH
conda install merv::envvar-pythonpath-null
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1019  
  IPD(Integrated Product Development,集成产品开发)是一种以客户需求为核心、跨职能团队协作为基础的产品开发方法。它通过整合市场、研发、制造、供应链等各个环节的资源与信息,实现高效的产品开发流程。IPD不仅是一种方法论,更是一种系统化的管理思维,旨在缩短产品开发周期、降低开发成本、提高产品...
IPD培训课程   0  
  华为的IPD(集成产品开发)流程是全球范围内备受认可的产品开发管理体系,其核心在于通过跨部门协作和系统化的流程管理,提升产品开发效率和质量。在IPD流程中,团队建设与领导力培养是两个至关重要的环节。高效的团队能够确保项目顺利推进,而优秀的领导力则是团队凝聚力和执行力的保障。本文将从团队建设的重要性、领导力在IPD中的核...
IPD集成产品开发流程   0  
  华为的集成产品开发(IPD)流程是其成功的关键因素之一,它不仅提升了产品开发的效率,还通过系统化的风险管理机制确保了项目的顺利推进。在IPD流程中,风险管理被视为贯穿始终的核心环节,其目的是在项目初期识别潜在问题,并在整个开发周期中持续监控和应对风险。通过有效的风险管理,华为能够最大限度地减少项目延误、成本超支和质量问...
IPD结构化流程   0  
  在项目管理领域,CDCP(Critical Decision Control Point)评审是确保项目成功的关键环节之一。CDCP评审的核心在于通过系统化的决策流程,确保项目在每个关键节点都能做出正确的选择,从而降低风险、提高效率并最终实现项目目标。然而,许多项目团队在CDCP评审过程中常常面临决策效率低下、信息不对...
华为IPD流程   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用