我正在为程序使用 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 虚拟,因为它是多余的),但是,我想要一些对其行为的解释。
发现错误 - Conda nmrfilter 环境安装了 Python 3.7,因此当它从requirements.txt 创建虚拟环境时,numpy=1.24 不可用,因为它需要 Python >=3.8,因此产生了错误。