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

Python 集成pyenv virtualenv conda和ASE的最佳实践,python,python-3.x,linux,conda,pyenv,Python,Python 3.x,Linux,Conda,Pyenv,我使用的是Linux桌面(特别是Pop_OS!20.04,类似于ubuntu) 我需要运行用于原子模拟的python包。 这可以通过多种方式安装(apt、pip、conda)。 出于我的目的,我需要使用conda安装它(尽可能与社区保持一致)。因为我不喜欢conda在bash中集成的方式,所以我决定使用pyenv作为虚拟环境管理器 因此,对于另一个问题的答案1,最好不要通过pyenv安装conda。 因此,在我简单的头脑中,我首先尝试了这个(案例A): 我用pyenv创建了一个虚拟环境 我使用正

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

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

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

  • 我用pyenv创建了一个虚拟环境
  • 我使用正确的pyenv安装conda
  • 在环境中并使用conda I安装ASE
  • $pyenv virtualenv 3.9.0案例a
    (案例a)$哪条蟒蛇
    /home/fex/.pyenv/chimes/python
    (案例a)$python-V
    Python 3.9.0
    (案例a)$bash Anaconda3-2020.07-Linux-x86_64.sh
    #我没有在bashrc中包括蟒蛇
    #激活conda eval“$(/home/user/anaconda3/bin/conda shell.YOUR_shell_NAME hook)”或“source/bin/activate”
    #康达初始化
    (baseA)$source/home/fex/anaconda3/bin/activate
    (基本)(个案a)$
    
    这种双重环境很有趣,我认为不应该发生。 但我无法用conda安装ASE。所以我给出了conda init:

    (基本)(案例a)$conda init
    (基本)(案例a)$source~/.bashrc
    (基础)$conda安装-c conda forge/label/cf202003 ase
    (基数)$ase测试
    ...
    fio/oi.py:TypeError:对象似乎不是类似文件的对象
    =========摘要==========
    测试次数363
    通行证:260
    失败次数:0
    错误:1
    跳过:102
    =============================
    测试套件失败!
    所用时间:42.3秒
    
    据我所知,这种方法是可行的,但绕过pyenv,我最终只使用了一个conda环境,这不是我首先想要的

    案例B: 这并不重要。创建环境后,我尝试使用pyenv安装conda,但无法在pyenv环境中使用它

    案例C: 我用以下方法解决问题:

  • 使用pyenv安装conda
  • 创建一个pyenv虚拟环境,该环境依赖于conda,而不是特定版本的python
  • $pyenv virtualenv miniconda3.X.Y fooenv
    
  • 这对我来说是可行的,但我正在使用conda中包含的python。这不是一个问题,但由于我没有完全掌握这里的全部技术细节,我想与大家分享我的疑虑
  • 我在这里写的另一个原因是ASE是DFT(密度泛函理论)领域中非常流行的标准,而DFT是目前化学/物理领域中最流行的标准之一。然而,手册和指南的编写并没有跟上python的快速步伐

    额外信息

    $pyenv版本
    系统
    2.7.18
    *3.9.0(由PYENV_版本环境变量设置)
    3.9.0/envs/caseA
    3.9.0/envs/caseB
    3.9.0/envs/coppie
    3.9.0/envs/foo
    凯萨
    案例B
    ccase
    科皮
    福
    miniconda3最新版本
    miniconda3-latest/envs/ccase#我用pyenv-virtualenv-miniconda3-latest-ccase-ccase-case C创建了这个
    $pyenv-v
    pyenv 1.2.21
    $whichpython
    /home/fex/.pyenv/chimes/python
    $python-V
    Python 3.9.0
    pyenv激活ccase
    pyenv virtualenv:提示更改将从未来版本中删除。配置“export PYENV\u VIRTUALENV\u DISABLE\u PROMPT=1”以模拟该行为。
    (ccase)$pip安装测试
    (ccase)$ase测试
    [...]
    ==================================================================================1290通过,233跳过,1失败,193.06秒(0:03:13)中有5次警告
    
    在这个阶段,我设法用conda安装了ASE。我在pyenv环境中完成了这项工作,该环境直接调用miniconda而不是python

    $pyenv virtualenv miniconda3.X.Y fooenv
    $pyenv激活fooend
    (fooenv)$conda安装-c conda forge/label/cf202003 ase#此安装ase
    (fooenv)$pip install pytest#在此版本的ase`ase test`中不起作用
    (fooenv)$ase测试#该测试比不使用pyenv的conda实现的测试更长、更完整
    
    这看起来非常复杂和脆弱,为什么不直接使用Conda?这是一个很好的观点。主要是因为我不喜欢它与我的bash交互的方式(你也可以责怪我的技术技能),也因为在anaconda之外的应用程序中有一个环境管理器似乎更合适。我不喜欢它与我的bash交互的方式。你能详细说明一下吗?对于anaconda以外的应用程序,似乎更适合使用环境管理器。你是什么意思?我必须预测一个方面。我用FORTRAN编写的软件在HPC上进行分布式计算。具体地说,我甚至不接触那个代码,我也不太关心代码,因为我处理的是这些代码的结果,就我而言,它们可能是rand函数的结果。1.因为我在很多方面都不是康达的专家,所以在过去,我的bashrc完全被康达搞砸了(我的错)。这包括减慢终端上的任何登录速度。2.有些软件包不适用于conda,我需要在外部使用它们。我知道这些都是借口,但我在一个领域工作,许多程序都是使用旧代码完成的,这些代码既没有维护也没有更新(例如,blender的python接口将原子坐标作为3D对象导入)。3.基本上,我的一个在IT部门工作的朋友建议我使用Pyev,它工作得非常好,直到我需要conda,正如我在最初的问题中解释的那样。底线是,现在他们要求我使用一点python,尽管没有给我足够的工具或时间来正确地学习和使用它。