Conda 环境中的意外 Python 路径

2024-12-20 08:37:00
admin
原创
67
摘要:问题描述:在 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
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1008  
  在项目管理中,变更是一个不可避免的现象。无论是客户需求的调整、市场环境的变化,还是技术方案的更新,都可能引发项目的变更。如果处理不当,这些变更可能会导致项目延期、成本超支,甚至项目失败。因此,如何有效地应对项目变更,成为项目管理中的核心挑战之一。IPD(集成产品开发)作为一种高效的项目管理方法,其流程图不仅能够帮助团队...
IPD流程中的charter   0  
  IPD(Integrated Product Development,集成产品开发)是华为在长期实践中总结出的一套高效产品开发管理体系。它不仅帮助华为在全球市场中脱颖而出,也成为许多企业提升产品开发效率的参考标杆。IPD的核心在于通过跨部门协作、流程优化和资源整合,实现从需求分析到产品交付的全生命周期管理。通过实施IP...
IPD开发流程管理   0  
  华为IPD(集成产品开发)流程是一种以客户需求为导向、跨部门协同的高效项目管理方法。它通过系统化的流程设计和严格的阶段控制,确保项目从概念到交付的每个环节都能高效运作。IPD流程的核心在于打破传统职能部门的壁垒,将产品开发、市场、销售、供应链等关键环节整合到一个统一的框架中,从而实现资源的优化配置和信息的无缝流动。这种...
IPD流程中TR   0  
  在项目管理的实践中,CDCP(Certified Data Center Professional)认证评审是一个至关重要的环节。通过这一评审,项目团队不仅能够验证其数据中心设计和运营的合规性,还能提升整体管理水平。为了确保评审的顺利进行,准备一系列关键文档是必不可少的。这些文档不仅是评审的依据,也是项目团队与评审专家...
华为IPD是什么   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用