Conda 环境中的意外 Python 路径

2024-12-20 08:37:00
admin
原创
154
摘要:问题描述:在 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
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用