集成pyenv-virtualenv-conda和ASE的最佳实践



我使用的是Linux桌面(特别是Pop_OS!20.04,类似于ubuntu(。

我需要运行ASE,它是用于原子模拟的python包。这可以通过多种方式安装(apt、pip、conda(。出于我的目的,我需要用conda安装它(尽可能与社区保持一致(。由于我不喜欢在bash中集成conda的方式,我决定使用pyenv作为虚拟环境管理器。

因此,对于另一个stackoverflow问题的答案1,最好不要通过pyenv安装conda。所以在我头脑简单的时候,我首先尝试了这个(案例A(:

  1. 我用pyenv创建了一个虚拟环境
  2. 我使用正确的脚本安装conda,现在是pyenv
  3. 在环境中并使用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:我通过以下方式解决问题:

  1. 已安装带有pyenv的conda
  2. 创建一个依赖于conda而不是特定版本python的pyenv虚拟环境
$ pyenv virtualenv miniconda3.X.Y fooenv
  1. 这对我有效,但我使用的是conda中包含的python。这不是问题,但由于我没有完全理解这里的全部技术细节,我想分享我的疑虑

我在这里写这篇文章的另一个原因是ASE是DFT(密度泛函理论(领域中非常流行的标准,迄今为止,DFT是化学/物理领域中被引用最多的主题之一。然而,手册和指南的编写并没有跟上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安装了ASE。我在pyenv环境中完成了这项工作,该环境直接调用miniconda而不是python。

$ pyenv virtualenv miniconda3.X.Y fooenv
$ pyenv activate fooend
(fooenv) $ conda install -c conda-forge/label/cf202003 ase # This installs ASE 
(fooenv) $ pip install pytest # In this version of ase `ase test` does not work
(fooenv) $ ase test # This test is longer and more complete that the once achieve with conda without pyenv

最新更新