Conda 环境中的 Python 虚拟环境行为:Python 解释器选择

问题描述 投票:0回答:1

我正在为程序使用 Conda 环境,以便正确配置软件包等。但是,我在不进行任何更改的情况下运行程序时遇到了麻烦,因为环境似乎没有选择正确的解释器。

我的 conda yaml 文件如下:

name: nmrfilter
channels:
  - rdkit
  - pytorch
dependencies:
  - python=3.7
  - anaconda
  - rdkit
  - pytorch=1.4
  - torchvision
  - pandas
  - numpy
  - seaborn
  - scikit-learn
  - pyarrow
  - numba
  - click
  - pip
  - ipywidgets
  - pip:
    - python-igraph
    - louvain
    - ruffus
    - tqdm
    - networkx
    - tensorflow-cpu
    - tensorboardX
    - cirpy    
    - pubchempy

它应该配置所有Python命令以使用conda安装的Python3.7。然而,当在 conda 环境中使用 Python 虚拟环境时,我遇到了无法解释的行为。我的requirements.txt(从中创建了python venv)如下:

numpy==1.24
scipy
pandas
rdkit
click
cirpy
scikit-learn
matplotlib
python-igraph
pubchempy
numba
torch
tqdm
igraph
louvain

#!/bin/bash

# Get the directory path where the shell script is located
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Check if the virtual environment already exists in the script's directory
if [ -f "$script_dir/nmrfilter_env/bin/activate" ]; then
    echo "NMRfilter_env already exists. Activating..."
    source "$script_dir/nmrfilter_env/bin/activate"
else
    echo "Creating virtual environment in $script_dir/nmrfilter_env..."
    python3 -m venv "$script_dir/nmrfilter_env"
    source "$script_dir/nmrfilter_env/bin/activate"

    echo "Installing the requirements..."
    python -m pip install -r requirements.txt

    echo "Installing Jupyter Notebook..."
    python -m pip install jupyter
fi

echo "Virtual environment activated."
echo "PYTHONPATH: $PYTHONPATH"
echo "Python executable: $(which python)"
echo "Python3 executable: $(which python3)"
echo "PIP executable: $(which pip)"
echo "Python version: $(python --version)"
echo "PIP version: $(pip --version)"
echo "Pip packages in virtual environment:"
pip list | grep numpy



#start the processing
python3 nmrfilter.py $1

...
...

python3 nmrfilter2.py $1

当此脚本运行时(第一次,意味着创建 python 虚拟环境),将产生以下输出:


Virtual environment activated.
PYTHONPATH: 
Python executable: /home/karl/nmrfilterv15/nmrfilter_env/bin/python
Python3 executable: /home/karl/nmrfilterv15/nmrfilter_env/bin/python3
PIP executable: /home/karl/nmrfilterv15/nmrfilter_env/bin/pip
Python version: Python 3.7.16
PIP version: pip 22.0.4 from /home/karl/nmrfilterv15/nmrfilter_env/lib/python3.7/site-packages/pip (python 3.7)
Pip packages in virtual environment:


Simulating spectra for your compounds...
Traceback (most recent call last):
  File "nmrfilter2.py", line 5, in <module>
    from clustering import *
  File "/home/karl/nmrfilter/clustering.py", line 2, in <module>
    from numpy import *
ModuleNotFoundError: No module named 'numpy'

我很困惑,尽管我的 python venv 和 conda“nmrfilter”env 都安装了 numpy,但它如何设法选择没有安装 numpy 的解释器。更让我困惑的是,脚本似乎按照指示选择了 python 虚拟环境解释器,但由于某种原因,它的 pip 列表中不包括 numpy?

总的来说,运行时,requirements.txt 中的包不会进入 pip 列表,尝试使用 python3 -m pip list 和 python -m pip list。

然而,当我纯粹在 conda 停用的情况下运行此程序时,所有内容都会正确安装和使用。

仅供参考,我知道如何解决这个问题(完全删除 python 虚拟,因为它是多余的),但是,我想要一些对其行为的解释。

python bash numpy module conda
1个回答
0
投票

发现错误 - Conda nmrfilter 环境安装了 Python 3.7,因此当它从requirements.txt 创建虚拟环境时,numpy=1.24 不可用,因为它需要 Python >=3.8,因此产生了错误。

© www.soinside.com 2019 - 2024. All rights reserved.