【发布时间】:2021-02-09 21:26:05
【问题描述】:
我正在使用带有 Linux 的桌面(特别是 Pop_OS!20.04,类似于 ubuntu)。
我需要运行 ASE,这是用于原子模拟的 python 包。 这可以通过多种方式安装(apt、pip、conda)。 出于我的目的,我需要使用 conda 安装它(尽可能与社区保持一致)。由于我不喜欢 conda 在 bash 中的集成方式,所以我决定使用 pyenv 作为虚拟环境管理器。
据此在另一个stackoverflow问题上回答1,最好不要通过pyenv安装conda。 所以在我简单的头脑中,我首先尝试了这个(案例 A):
- 我用 pyenv 创建了一个虚拟环境;
- 我使用正确的script 安装 conda,现在使用 pyenv
- 在环境中并使用 conda 我安装 ASE
$ pyenv virtualenv 3.9.0 caseA
(caseA) $ which python
/home/fex/.pyenv/shims/python
(caseA) $ python -V
Python 3.9.0
(caseA) $ bash Anaconda3-2020.07-Linux-x86_64.sh
# I did not include anaconda in the bashrc
# To activate conda eval "$(/home/user/anaconda3/bin/conda shell.YOUR_SHELL_NAME hook)" or "source <path to conda>/bin/activate"
# conda init
(baseA) $ source /home/fex/anaconda3/bin/activate
(base) (caseA) $
这种双重环境很有趣,我认为它不应该发生。
但是我无法使用 conda 安装 ASE。于是我给了conda init:
(base)(caseA) $ conda init
(base)(caseA) $ source ~/.bashrc
(base) $ conda install -c conda-forge/label/cf202003 ase
(base) $ ase test
...
fio/oi.py: TypeError: Object does not appear to be a file-like object
========== Summary ==========
Number of tests 363
Passes: 260
Failures: 0
Errors: 1
Skipped: 102
=============================
Test suite failed!
Time elapsed: 42.3 s
据我了解,这种方法有效,但绕过 pyenv,我最终只使用了一个 conda 环境,这不是我想要的。
案例 B: 这不是关键。创建环境后,我尝试使用 pyenv 安装 conda,但无法在 pyenv 环境中使用它。
案例 C: 我通过以下方式解决问题:
- 使用 pyenv 安装 conda
- 创建一个依赖 conda 而不是特定版本的 python 的 pyenv 虚拟环境
$ pyenv virtualenv miniconda3.X.Y fooenv
- 这对我有用,但我使用的是 conda 中包含的 python。这不是问题,但由于我没有完全掌握这里的全部技术性,所以我想分享我的疑问。
我在这里写的另一个原因是 ASE 是 DFT(密度泛函理论)领域非常流行的标准,目前它是化学/物理领域的most cited topic 之一。然而,手册和指南的编写跟不上python的快节奏。
额外信息
$ pyenv versions
system
2.7.18
* 3.9.0 (set by PYENV_VERSION environment variable)
3.9.0/envs/caseA
3.9.0/envs/caseB
3.9.0/envs/coppie
3.9.0/envs/foo
caseA
caseB
ccase
coppie
foo
miniconda3-latest
miniconda3-latest/envs/ccase # I created this with pyenv virtualenv miniconda3-latest ccase ccase stands for case C
$ pyenv -v
pyenv 1.2.21
$ which python
/home/fex/.pyenv/shims/python
$ python -V
Python 3.9.0
pyenv activate ccase
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(ccase) $ pip install pytest
(ccase) $ ase test
[...]
====================================================================== 1290 passed, 233 skipped, 1 xfailed, 5 warnings in 193.06s (0:03:13)
【问题讨论】:
-
这看起来非常复杂和脆弱,为什么不直接使用 Conda 呢?
-
这很好。主要是因为我不喜欢它与我的 bash 交互的方式(这也可以归咎于我的技术技能),并且因为在 anaconda 之外的应用程序中使用环境管理器似乎更合适。
-
我不喜欢它与我的 bash 交互的方式 你能详细说明一下吗? 为 anaconda 之外的应用程序设置一个环境管理器似乎更合适 你是什么意思?
-
我必须预见到一个方面。我使用 FORTRAN 编写的软件进行研究,以通过 HPC 进行分布式计算。具体来说,我什至不接触该代码,而且我根本不关心代码,因为我处理此类代码的结果,就我而言,这可能是 rand 函数的结果。 1. 由于我对 conda 的工作原理在很多方面都不是专家,因此在过去,我的 bashrc 完全被 conda 搞砸了(我的错)。这包括减慢终端上的任何登录速度。 2.有些包是conda没有的,需要在外面使用
-
我知道这些都是借口,但我在一个领域工作,其中许多程序都是用既不维护也不更新的旧代码完成的(例如,用于混合器的 python 接口将原子坐标导入为 3D 对象) . 3. 基本上,我的一个在 IT 部门工作的朋友向我推荐了 pyenv,它工作得非常好,直到我需要 conda,正如我在最初的问题中解释的那样。最重要的是,现在他们要求我使用一点 Python,尽管没有给我工具或时间来学习和正确使用它。
标签: python python-3.x linux conda pyenv